1302 导弹拦截
来源:互联网 发布:个人日志提醒软件 编辑:程序博客网 时间:2024/05/21 06:39
描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮 弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入
本题有多组测试数据。输入的第一行为导弹的个数,最多10000。接下来每行为导弹依次飞来的高度(不大于30000 的正整数)
以0结尾(不做处理)
输出
对每组输入数据,输出一行,为最多拦截的导弹个数。
样例输入
6
5 3 2 4 1 3
3
3 3 3
0
5 3 2 4 1 3
3
3 3 3
0
样例输出
4
3
解题思路:
此题其实是一道动态规划题。可以从后往前推,记录在每一个位置处发射导弹后面最多能拦截多少导弹的个数。这样找出一个最大的数即可。此题其实也可以从前往后推,高人们可以试试。
#include <stdio.h>main(){int number,te;int a[10001];int b[10001];int i,j;int t;int max;scanf("%d",&number);while(number!=0){ for(te=1;te<=number;te++)scanf("%d",&a[te]);for(te=1;te<=number;te++)b[te]=1; for(i=number-1;i>0;i--){t=0;for(j=number;j>i;j--){if(a[i]>=a[j]&&(b[j]+b[i])>t){t=b[j]+b[i]; continue;}} if(t>=1) b[i]=t; else continue;} max=0;for(i=1;i<=number;i++){ if(max<b[i])max=b[i];}printf("%d\n",max);scanf("%d",&number);}}
- 1302 导弹拦截
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 导弹拦截
- 导弹拦截
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- 拦截导弹
- C#程序实现动态调用DLL的研究
- 读取随机函数的js
- 找出一个数组里面前K个最大数
- 项目总结
- 富裕的态度
- 1302 导弹拦截
- 依赖注入 控制反转Ioc
- php学习
- makefile报错 warning: ignoring old commands for target
- 正则表达式之身份证号验证
- android系统移植要点之五--以6410为例
- 1303 后续遍历
- 拆分字符串的表值函数
- android系统移植要点之六--以6410为例