nyoj 814又见拦截导弹
2015-08-01 11:48
197 查看
又见拦截导弹
时间限制:3000 ms | 内存限制:65535 KB[align=center]难度:3[/align]
描述
大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度。突然有一天,雷达捕捉到敌国的导弹来袭。由于该系统存在缺陷,所以如果想把所有的导弹都拦截下来,就要多准备几套这样的导弹拦截系统。但是由于该系统成本太高,所以为了降低成本,请你计算一下最少需要多少套拦截系统。
输入有多组测试数据。
每组数据先输入一个整数N(N≤3000),代表有N发导弹来袭。接下来有N个数,分别代表依次飞来的导弹的导弹的高度。当N=-1时表示输入结束。输出每组输出数据占一行,表示最少需要多少套拦截系统。样例输入
8 389 207 155 300 299 170 158 65 5 265 156 123 76 26
样例输出
2 1
代码~:
#include<stdio.h>
#include<stdlib.h>
#define M 3001
int a[M],dp[M];
int main()
{
int N;
while(scanf("%d",&N)&&(N!=-1))
{
int i,j,count=1;
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
dp[0]=a[0];
for(i=1;i<N;i++)
{
for(j=0;j<count;j++)
{
if(a[i]<=dp[j])//只要小于或等于前面其中一个子序列的第一个数,
//就更新该子序列的第一位数并进行下一个高度判断
{
dp[j]=a[i]; //存储一个序列中最小的数
break;
}
}
if(j==count)//重开一个存储序列
{
dp[j]=a[i];
count++;
}
}
printf("%d\n",count);
}
return 0;
}
相关文章推荐
- 【动态树】 HDOJ 5333 Undirected Graph
- 7月21日---关键字、抽象方法、抽象类、接口、多态及总结、设计模式
- swift 中如何定义接口
- Java垃圾回收工作原理
- 台湾国立大学机器学习基石.听课笔记(第六讲): 一般化(举一反三)的理论
- 用php编写空心金字塔,主要在于学习它的逻辑与思想
- linux下jdk的安装和配置
- AVAudioRecorder 录音
- Git版本库添加空目录
- Tunnel Warfare----hdu1540线段树
- linux下mysql乱码问题
- uva 10305 Ordering Tasks 拓扑排序 逆DFS法和一般法
- asp.net MVC 模拟实现与源码分析
- POJ 1201 Intervals (差分约束,最短路)
- (1) Servlet - 1
- BootStray CSS代码
- Python进阶之装饰器@decorator
- win7升级win10激活指南——查看预装Win7/8/8.1电脑内置系统激活密钥(OEM Key)方法
- GCJ 2009 Round2 A 构造贪心策略
- NGUI之UI模块基类