3:攔截導彈(最長上升子序列)

點擊打開鏈接

描述 某國爲了防禦敵國的導彈襲擊,開發出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲,並觀測到導彈依次飛來的高度,請計算這套系統最多能攔截多少導彈。攔截來襲導彈時,必須按來襲導彈襲擊的時間順序,不允許先攔截後面的導彈,再攔截前面的導彈。 輸入 輸入有兩行,
第一行,輸入雷達捕捉到的敵國導彈的數量k(k<=25),
第二行,輸入k個正整數,表示k枚導彈的高度,按來襲導彈的襲擊時間順序給出,以空格分隔。
輸出 輸出只有一行,包含一個整數,表示最多能攔截多少枚導彈。
樣例輸入
8
300 207 155 300 299 170 158 65
樣例輸出
6
來源 醫學部計算概論2006期末考試題



源代碼

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>

using namespace std;

int main()
{
	int n;
	int MaxLen[50];
	int a[50]; 
	scanf("%d",&n);
	for(int i=1; i<=n; ++i)
	{
		MaxLen[i]=1;			//初始化長度爲一
		scanf("%d",&a[i]);
	}
	for(int i=2; i<=n; ++i)
	{
		for(int j=1; j<i; ++j)
		{
			if(a[i]<=a[j])				//只要後面的比前面的小長度就加一
			MaxLen[i]=max(MaxLen[i],MaxLen[j]+1);					
		}	
	}
	printf("%d\n",*max_element(MaxLen+1 , MaxLen+n+1));	//注意這裏的輸出方式
//	cout<< *max_element(MaxLen , MaxLen+n);
	
	return 0;
}









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