【3005】拦截导弹问题(noip1999)
Time Limit: 3 second
Memory Limit: 2 MB
某国为了防御帝国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然他的第一发炮弹能达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段,所以这套系统有可能不能拦截所有的导弹。
输入导弹一次飞来的高度(雷达给出的高度是不大于2147483647的正整数)。计算要拦截所有导弹时最小需要配备所少套这种导弹拦截系统。
Input
输入文件两行
第一行输入n
第二行输入n颗依次飞来的导弹高度,输入的各个元素用空格隔开(1≤n≤1000)。
Output
输出要拦截所有导弹最小配备的系统数k。(最后用换行结束)
Sample Input
8
389 207 155 300 299 170 158 65
Sample Output
2
【题解】
打导弹的过程就是求最长下降子序列的过程,每次都求最长的,让每个导弹的效果达到最大。
打完后的导弹,用一个bool型数组 置为false,下一次扫描的时候,直接跳过就可以了.
【代码】
#include <cstdio> int n,a[1002],f[1002],ans = 0,rest,pre[1002],now,maxn = 0;
bool bo[1002]; void input_data()
{
scanf("%d",&n);
for (int i = 1;i <= n;i++)
scanf("%d",&a[i]);
rest = n;
for (int i = 1;i <= n;i++) //一开始所有的导弹都可以打得到。
bo[i] = true;
} void get_ans()
{
while (rest > 0)
{
for (int i = 1;i <= n;i++) //for 每一个导弹
if (bo[i]) //如果这个导弹之前未被打过
{
f[i] = 1; //表示以第i个导弹为最长下降序列的最后一个数 的序列的长度。
pre[i] = -1; //这个pre数组用于最后标记那些已经被打过的导弹序号.
if (f[i] > maxn) //如果能更新最大长度 就更新,同时记录这个尾数字。方便找序列
{
maxn = f[i]; //更新最大值
now = i; //记录位置
}
for (int j = 1;j <= i-1;j++) //往前面尝试更新f[i]
if (bo[j] && a[i] <= a[j] && ((f[j] + 1) > f[i])) //没有用过 满足递减 有更新必要
{
f[i] = f[j] +1; //更新f[i]
pre[i] = j; //记录上一个数的位置
if (f[i] > maxn)
{
maxn = f[i];
now = i;
}
}
}
while (now != -1) //如果没有输出到根 就继续输出
{
bo[now] = false;
rest--;
now = pre[now];
}
ans++;
maxn = 0;
}
} void output_ans()
{
printf("%d\n",ans);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}
【3005】拦截导弹问题(noip1999)的更多相关文章
- 拦截导弹问题(Noip1999)
1322:[例6.4]拦截导弹问题(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 3843 通过数: 1373 [题目描述] 某国为了防 ...
- 题目:[NOIP1999]拦截导弹(最长非递增子序列DP) O(n^2)和O(n*log(n))的两种做法
题目:[NOIP1999]拦截导弹 问题编号:217 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发 ...
- 588. [NOIP1999] 拦截导弹
588. [NOIP1999] 拦截导弹 ★ 输入文件:missile.in 输出文件:missile.out 简单对比 时间限制:1 s 内存限制:128 MB 题目描述 某国为了防御敌国的导 ...
- 一本通 1260:【例9.4】拦截导弹(Noip1999)
拦截导弹(Noip1999) 经典dp题目,这个做法并非最优解,详细参考洛谷导弹拦截,想想200分的做法. #include <iostream> #include <cstdio& ...
- 1260:【例9.4】拦截导弹(Noip1999)
题目来源:http://ybt.ssoier.cn:8088/problem_show.php?pid=1260 1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms ...
- nyoj814_又见拦截导弹_DP
又见拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦 ...
- tyvj P1209 - 拦截导弹 平面图最小割&&模型转化
P1209 - 拦截导弹 From admin Normal (OI)总时限:6s 内存限制:128MB 代码长度限制:64KB 背景 Background 实中编程者联盟为了培养技 ...
- (Java实现) 拦截导弹
1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4063 通过数: 1477 [题目描述] 某国为了防御敌国的导弹袭击,发展出一 ...
- Java实现 蓝桥杯VIP 算法训练 拦截导弹
1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4063 通过数: 1477 [题目描述] 某国为了防御敌国的导弹袭击,发展出一 ...
- codevs1409 拦截导弹2
[问题描述]一场战争正在 A 国与 B 国之间如火如荼的展开.B 国凭借其强大的经济实力开发出了无数的远程攻击导弹,B 国的领导人希望,通过这些导弹直接毁灭 A 国的指挥部,从而取得战斗的胜利!当然, ...
随机推荐
- chattr---文件隐藏属性
- 用内置的库turtle来画一朵花,python3
题目:用内置的库turtle来画一朵花 看了群主最后成像的图片,应该是循环了36次画方框,每次有10度的偏移. 当然不能提前看答案,自己试着写代码. 之前有用过海龟画图来画过五角星.奥运五环.围棋盘等 ...
- 【Henu ACM Round #12 D】 Longest Subsequence
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 记录每个数字出现的次数cnt[x]; (大于1e6的直接忽略) 另外用一个数组z[1e6] 然后for枚举x 第二层for枚举x的倍 ...
- LightOJ 1063 Ant Hills
Ant Hills Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on LightOJ. Original ...
- [ReasonML] Named & optional params
// ::country is named param // ::country=?: which make it optional // because we make ::country=? op ...
- Eclipse&STS常用小技巧
开发是经常用到的代码可进行快捷提示,比如mian alt+/就提示出了main方法是不是很方便,为什么就能提示出来呢? 马上来了: 在你使用的java开发工具中点击Window--->Prefe ...
- 洛谷P1043 数字游戏
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 利用日志使管理Linux更轻松
利用日志使管理Linux更轻松 操作系统的日志主要具有审计与监测的功能,通过对日志信息的分析,可以检查错误发生的原因,监测追踪入侵者及受到攻击时留下的痕迹,甚至还能实时的进行系统状态的监控.有效利用日 ...
- POJ 1118 Lining Up 直线穿过最多的点数
http://poj.org/problem?id=1118 直接枚举O(n^3) 1500ms能过...数据太水了...这个代码就不贴了... 斜率排序O(n^2logn)是更好的做法...枚举斜率 ...
- SPOJ 3899. Finding Fractions 连分数
连分数乱搞,我反正是一眼没看出结果 某巨巨把这题讲解的比较详细 : http://blog.csdn.net/gogdizzy/article/details/8727386 令k = [a/b] 然 ...