拦截导弹
2016-03-16 20:01
148 查看
题目描述:
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。
输入:
每组输入有两行,
第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),
第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。
输出:
每组输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。
样例输入:
样例输出:
6
最长不增子序列原理,存在如下递推关系:
F[1] = 1
F[i] = max{1,F[j]+i|j<i&&aj>=ai}
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。
输入:
每组输入有两行,
第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),
第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。
输出:
每组输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。
样例输入:
8 300 207 155 300 299 170 158 65
样例输出:
6
#include <iostream> using namespace std; int list[26]; //存放炮弹高度 int dp[26]; //保存以第i个导弹结尾的最长不增序列长度 int max(int a,int b)//求最大值函数 { return a>b? a:b; } int main() { int n,i,j; while(cin>>n) { for(i = 1;i <= n;i++)//输入 { cin>>list[i]; } for(i = 1;i <= n;i++) //逐个求dp[i] { int tmax = 1; //初始值为1 for(j = 1;j < i;j++) { if(list[j] >= list[i])//对应j<i&&aj>=ai { tmax = max(1,dp[j]+1); } } dp[i] = tmax; } int ans = 1; for(i = 1;i <= n;i++) { ans = max(ans,dp[i]); } cout<<ans<<endl; } return 0; }
最长不增子序列原理,存在如下递推关系:
F[1] = 1
F[i] = max{1,F[j]+i|j<i&&aj>=ai}
相关文章推荐
- guice框架的入门使用
- Java集合源码学习笔记(四)HashMap分析
- 微软 MSR Image Recognition Challenge 2016(IRC@ICME) 测试demo
- 浅谈程序员职业规划
- 【Data Algorithms_Recipes for Scaling up with Hadoop and Spark】Chapter5 Order Inversion Pattern
- 韩顺平Linux操作系统视频教程
- 设计模式-工厂模式
- Bootstrap 输入框组
- split分割字符串时的一些特殊分隔符
- split分割字符串时的一些特殊分隔符
- 关于content-type
- 我做的 地税信息中心设备台账
- hdu 1556 Color the ball(区间更新,单点求值)
- linux查看文件系统的使用空间和文件夹占用空间的命令
- HDU-1251 统计难题(字典树)
- oracle中的exists 和not exists 用法详解 (和in)
- LeetCode 202 Happy number
- 在tomcat7中启用HTTPS的详细配置
- ArcGIS调用DataInteroperabilityTools导出数据
- 什么是事物