資訊學奧賽一本通 1289:攔截導彈(evd)

everwide1982發表於2020-11-17

【題目描述】
某國為了防禦敵國的導彈襲擊,發展出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的導彈。

輸入導彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數),計算這套系統最多能攔截多少導彈。

【輸入】
第一行是一個整數N(不超過15),表示導彈數。

第二行包含N個整數,為導彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數)。

【輸出】
一個整數,表示最多能攔截的導彈數。

【輸入樣例】
8
389 207 155 300 299 170 158 65
【輸出樣例】
6
【心得】模板題,能理解“不高於”的意思就夠了!
【AC程式碼】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=20;
int n,a[N],b[N],ma=-1;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i];
		b[i]=1;
	}
	for(int i=n-1;i>=1;i--)
	{
		for(int j=i+1;j<=n;j++) if(a[i]>=a[j]&&b[i]<=b[j]) b[i]=b[j]+1;
		if(b[i]>ma) ma=b[i];
	}
	cout<<ma<<endl;
	return 0;
}

相關文章