【練習】問題 B: 攔截導彈

題目描述

某國爲了防禦敵國的導彈襲擊,開發出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲,並觀測到導彈依次飛來的高度,請計算這套系統最多能攔截多少導彈。攔截來襲導彈時,必須按來襲導彈襲擊的時間順序,不允許先攔截後面的導彈,再攔截前面的導彈。

輸入

每組輸入有兩行,第一行,輸入雷達捕捉到的敵國導彈的數量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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章