导弹

CH6803 导弹防御塔

无人久伴 提交于 2020-03-21 07:22:37
6803 导弹防御塔 0x60「图论」例题 背景 Freda的城堡—— “Freda,城堡外发现了一些入侵者!” “喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~” “可是入侵者已经接近城堡了呀!” “别担心,rainbow,你看呢,这是我刚设计的导弹防御系统的说~” “喂...别卖萌啊……” 描述 Freda的城堡遭受了M个入侵者的攻击!Freda控制着N座导弹防御塔,每座塔都有足够数量的导弹,但是每次只能发射一枚。在发射导弹时,导弹需要 T_1 秒才能从防御塔中射出,而在发射导弹后,发射这枚导弹的防御塔需要 T_2 分钟来冷却。 所有导弹都有相同的匀速飞行速度V,并且会沿着距离最短的路径去打击目标。计算防御塔到目标的距离Distance时,你只需要计算水平距离,而忽略导弹飞行的高度。导弹在空中飞行的时间就是 (Distance/V) 分钟,导弹到达目标后可以立即将它击毁。 现在,给出N座导弹防御塔的坐标,M个入侵者的坐标,T_1,T_2 和V。因为Freda的小伙伴Rainbow就要来拜访城堡了,你需要求出至少多少分钟才能击退所有的入侵者。 输入格式 第一行五个正整数N,M,T1,T2,V。 接下来M行每行两个整数,代表入侵者的坐标。 接下来N行每行两个整数,代表防御塔的坐标。 输出格式 输出一个实数,表示最少需要多少分钟才能击中所有的入侵者

蓝桥杯题目练习(拦截导弹)

ε祈祈猫儿з 提交于 2020-02-19 12:09:35
算法训练VIP 拦截导弹 原题链接: 拦截导弹 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹 拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的 导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入 一行,为导弹依次飞来的高度 输出 两行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数 样例输入 389 207 155 300 299 170 158 65 样例输出 6 2 思考: 最多能拦截的导弹就是高度的最长下降子序列; 要拦截所有导弹最少要配备的系统数就是高度的最长上升子序列 # include <iostream> using namespace std ; int height [ 100 ] ; int dp_down [ 100 ] ; //高度下降序列依次的长度 int dp_up [ 100 ] ; //高度上升序列依次的长度 int mycount = 1 ; int down = 0 , up = 0 ; int main ( ) { while ( cin

ybt1322 拦截导弹

浪尽此生 提交于 2020-02-17 21:58:32
ybt1322 拦截导弹 【题目描述】 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最小需要配备多少套这种导弹拦截系统。 【输入】 n颗依次飞来的高度(1≤n≤1000)。 【输出】 要拦截所有导弹最小配备的系统数k。 【输入样例】 389 207 155 300 299 170 158 65 【输出样例】 2 【提示】 输入:导弹高度:4 3 2 输出:导弹拦截系统 k = 1 【题解】 这道题的思路是令每套装置的价值最大化。 也就是说,避免让一个刚拦截了300m导弹的装置拦截50m的,而刚拦截60m导弹的装置就可以拦截它。 首先,第一发导弹是必须要用一套新的装置的。而第二发就有两种情况:比第一发高,只能再开一套;比第一发矮,使用第一套拦截。到了第i发导弹,就已经有u套装置。那么从小到大枚举装置能拦截的导弹高度,然后选择刚好能拦截i的最小的装置,就能最大限度减小浪费。如果所有装置都无法拦截,那么就新开一个装置来拦截。 关于维护升序排列的装置:由于只有所有装置都无法拦截才会新开装置

1322:拦截导弹问题(Noip1999)

99封情书 提交于 2020-02-13 00:42:49
【题目描述】 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都 不能高于前一发的高度 。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最小需要配备多少套这种导弹拦截系统。 【输入】 n颗依次飞来的高度(1≤n≤1000)。 【输出】 要拦截所有导弹最小配备的系统数k。 【输入样例】 389 207 155 300 299 170 158 65 【输出样例】 2 【提示】 输入:导弹高度: 4 3 2 输出:导弹拦截系统k=1 // Created on 2020/2/12 /*#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <climits>*/ #include <bits/stdc++.h> using namespace std; const int idata=1000+5; int goal[idata]; int step[idata]; int n,m; int flag; int cnt; int ans=1; int

动态规划-线性动态规划总结

浪尽此生 提交于 2020-02-12 03:48:34
线性规划个人理解就是给你一串数,可能是一个数列,可能是一个环,根据题意和数据递推出一个最优解。 核心过程就是能找到递推方程。 例如 求一个数列的 最长不 上升子序列的 长度。注意是长度不是序列! 数列:389 207 155 300 299 170 158 65 建一个dp数组,设这个数列储存在a数组 通常求什么,设什么,设dp[i]表示长度为i的串, 最长不 上升子序列的长度 dp[1]=a[1]=389 下一个数 a[2]=207 加在后面 dp[2]=207 下一个数a[3]=155 加在后面 dp[3]=155 下一个数 300 不能直接加在后面了,需要做选择 因为要最长不上升,可以知道末尾的数为数列最小数,我们希望最小数前面尽量大,这样是最好的情况 我们想要389 207 155 还是 389 300 155? 肯定是后面的,我们希望数下降的慢一些。 递推方式 if(这个数a[i]<dp[i]) 加在后面 dp[++len]=a[i] else 遍历dp[]数组,更换更优的值(注意这里只是更换!没有增加长度) 例题一 例题链接 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统

【练习】问题 B: 拦截导弹

帅比萌擦擦* 提交于 2020-02-09 20:14:26
题目描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。 输入 每组输入有两行,第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。 输出 每组输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。 样例输入 Copy 4 9 6 7 8 7 4 5 6 7 13 42 3 5 6 5 4 3 5 0 样例输出 Copy 2 2 4 #include <cstdio> #include <algorithm> using namespace std; const int maxn=30; int h[maxn],dp[maxn]; int main(){ int k; while(scanf("%d",&k)){ if(k==0){ break; } else{ int ans=-1; for(int i=0;i<k;i++){ scanf("%d",&h[i]); } for(int i=0;i

最少拦截系统//HDU - 1257//dp

房东的猫 提交于 2020-02-07 18:53:40
最少拦截系统//HDU - 1257//dp 题目 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统. Input 输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔) Output 对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统. Sample Input 8 389 207 155 300 299 170 158 65 Sample Output 2 链接:https://vjudge.net/contest/349029#problem/E 思路 如果自身比前面任意一个数大,那么若把前面那个数作为所接导弹组最高的那个,则接这个导弹需要多一个拦截器。状态转移方程为if (a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1); 代码 # include <cstdio> # include <algorithm> #

P1020 导弹拦截

只谈情不闲聊 提交于 2020-02-07 18:42:26
P1020 导弹拦截 提交 115.78k 通过 24.09k 时间限制 1.00s 内存限制 125.00MB 题目提供者 CCF_NOI 难度 普及/提高- 历史分数 200 提交记录 查看题解 标签 NOIp普及组 Special Judge 1999 查看算法标签 进入讨论版 相关讨论 查看讨论 推荐题目 查看推荐 展开 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是 ≤50000 \le 50000 ≤ 5 0 0 0 0的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入格式 11 1行,若干个整数(个数 ≤100000 \le 100000 ≤ 1 0 0 0 0 0) 输出格式 22 2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入输出样例 输入 #1 389 207 155 300 299 170 158 65 输出 #1 6 2 说明/提示

贪心算法 一本通

浪尽此生 提交于 2020-02-07 17:40:11
1322:【例6.4】拦截导弹问题(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 8465 通过数: 3237 【题目描述】 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的** 第一发炮弹能够到达任意的高度 ,但是以后 每一发炮弹都不能高于前一发的高度 **。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最小需要配备多少套这种导弹拦截系统。 【输入】 n颗依次飞来的高度(1≤n≤1000)。 【输出】 要拦截所有导弹最小配备的系统数k。 【输入样例】 389 207 155 300 299 170 158 65 【输出样例】 2 【提示】 输入:导弹高度: 4 3 2 输出:导弹拦截系统k=1 分析:贪心算法,对于系统来说系统尽量开得少,对于每个系统拦截导弹来说,尽量拦截较高(多)的导弹。 开一个数组,记录每个系统能拦截的最低的导弹;然后每来一个导弹就要从已经开的系统中找出一个能拦截导弹的高度比他大的且差值最小的,因为你不能让当前能拦截较高导弹的系统拦截这个导弹,你只需一个个将儿能拦住他的就行;如果能找到,修改这个系统能拦截的 最低高度,如果不能再开一个系统

HDU 1257 最少拦截系统

 ̄綄美尐妖づ 提交于 2020-02-04 02:59:01
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6572 Accepted Submission(s): 2571 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统. Input 输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔) Output 对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统. Sample Input 8 389 207 155 300 299 170 158 65 Sample Output 2 这题开始看的时候以为,是已经知道所有会飞来的导弹的高度,然后求最少要配备多少套这种导弹拦截系统。 但是,这题要结合现实