1686: 【基础】拦截导弹
内存限制:16 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:5
解决:2
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹的枚数和导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,每个数据之间至少有一个空格),计算这套系统最多能拦截多少导弹。
输入导弹的枚数和导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,每个数据之间至少有一个空格),计算这套系统最多能拦截多少导弹。
输入
第1行有1个整数n,代表导弹的数量。(n<=1000)
第2行有n个整数,代表导弹的高度。(雷达给出的高度数据是不大于30000的正整数)
第2行有n个整数,代表导弹的高度。(雷达给出的高度数据是不大于30000的正整数)
输出
输出这套系统最多能拦截多少导弹。
样例输入 复制
8
389 207 155 300 299 170 158 65
样例输出 复制
6
提示
#include<bits/stdc++.h> using namespace std; int a[1010],dp[1010],n,i,j,ans; int main(){ cin>>n; for(i = 1;i <= n;i++) { cin>>a[i]; } for(i = 1;i <= n;i++) { dp[i]=1; for(j = i-1;j >= 1;j--) { if(a[i] <= a[j]) { dp[i]=max(dp[i],dp[j]+1); } } } for(i = 1;i <= n;i++) { ans=max(ans,dp[i]); } cout<<ans; return 0; }