拦截导弹
题目描述:
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够 到达任意的高度,但是以后每一发炮弹都不能高于前一发的高 度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用 阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入格式:
输入数据为导弹依次飞来的高度,所有高度值均为 不大于 30000 的正整数。
输出格式:
输出只有一行,是这套系统最多能拦截的导弹数。
输入样例:
1
8
389 207 155 300 299 170 158 65
输出样例:
6
参考代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int dp[20];
int a[20];
int main()
{
int t;
cin>>t;
while (t--)
{
memset(dp,0,sizeof(dp));
int n;
cin>>n;
int i,j;
int maxn=1;
for (i=1;i<=n;i++)
{
cin>>a[i];
}
dp[1]=1;
for(i=2;i<=n;i++)
{
int count=0;
for(j=1;j<i;j++)
{
if ((a[i]<a[j])&&count<dp[j])
{
count=dp[j];
}
dp[i]=count+1;
}
}
for (i=1;i<=n;i++)
{
if(maxn<dp[i])
maxn=dp[i];
}
cout<<maxn<<endl;
}
return 0;
}