題目描述
某國爲了防禦敵國的導彈襲擊,開發出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲,並觀測到導彈依次飛來的高度,請計算這套系統最多能攔截多少導彈。攔截來襲導彈時,必須按來襲導彈襲擊的時間順序,不允許先攔截後面的導彈,再攔截前面的導彈。
輸入
每組輸入有兩行,第一行,輸入雷達捕捉到的敵國導彈的數量k(k<=25),第二行,輸入k個正整數,表示k枚導彈的高度,按來襲導彈的襲擊時間順序給出,以空格分隔。
輸出
每組輸出只有一行,包含一個整數,表示最多能攔截多少枚導彈。
樣例輸入 Copy
4 9 6 7 8 7 4 5 6 7 13 42 3 5 6 5 4 3 5 0
樣例輸出 Copy
2 2 4
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=30;
int h[maxn],dp[maxn];
int main(){
int k;
while(scanf("%d",&k)){
if(k==0){
break;
}
else{
int ans=-1;
for(int i=0;i<k;i++){
scanf("%d",&h[i]);
}
for(int i=0;i<k;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(h[i]<=h[j]&&dp[j]+1>dp[i]){
dp[i]=dp[j]+1;
}
}
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
}
}
return 0;
}