【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 国的指挥部,从而取得战斗的胜利!当然, ...
随机推荐
- 如何优雅的写UI——(6)内存泄漏
控件讲了这么久,其实我的程序有两个Bug不知道大家有没有发现,这两个Bug都不会报错,对程序运行来说都没有阻碍,但是这种Bug对整个代码来说是一个很大的安全隐患. 什么是内存泄漏 内存泄漏(Memor ...
- Mysql学习总结(16)——Mysql之数据库设计规范
一.三大范式 1.第一范式:消除一个字段包含多个数据库值,消除一个记录包含重复的组(单独的一列包含多个项目),即可满足1NF. 2.第二范式:消除部分依赖性即可转化为2NF.部分依赖性表示一个记录中包 ...
- Apache ZooKeeper Getting Started Guide 翻译
ZooKeeper 開始向导 開始:用zookeeper协调分布式程序 单例操作 管理zookeeper存储 连接zookeeper 执行zookeeper 以复制模式执行zookeeper 其他优化 ...
- NET Framework 4.5 有更加简便的方法 Task.Run()
NET Framework 4.5 有更加简便的方法 Task.Run()
- Trie&可持久化Trie
WARNING:以下代码未经测试,若发现错误,欢迎指出qwq~ Trie树(字典树) 一种简单的数据结构,可存储大量字符串,可在$O(len)$的时间内完成插入,删除,查找等操作. 下面是一个简单的例 ...
- 记阮一峰---JavaScript 标准参考教程之标准库-Object对象
在看到阮大神的-标准库-Object对象时 有个 类型判断类型 方法可能以后会用到.特此记录一下 4.3:toString()的应用:判断数据类型 Object.prototype.toString方 ...
- 20160218.CCPP体系具体解释(0028天)
程序片段(01):加法.c 内容概要:字符串计算表达式 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <st ...
- 删除online日志測试及ora-600 [4194]错误的处理
今天做了一个关于破坏online日志的恢复測试,主要三个场景: 測试1:正常关闭数据库后删除非当前日志 測试2:正常关库后.删除在线日志文件 測试3:非正常关闭数据库.并删除当前在线日志文件 我的測试 ...
- Android学习笔记之Bitmap位图的旋转
位图的旋转也可以借助Matrix或者Canvas来实现. 通过postRotate方法设置旋转角度,然后用createBitmap方法创建一个经过旋转处理的Bitmap对象,最后用drawBitmap ...
- jedate-开始使用一款好用的时间插件
jeDate日期控件 -(原生JS版)jeDate V6.5.0 是一款原生JS开发的 不依赖任何第三方库 大众化的日期控件,包含 多语言.设定年月(YYYY-MM).日期范围限制.开始日期设定.自定 ...