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

everwide1982發表於2020-10-27

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

輸入導彈依次飛來的高度(雷達給出的高度不大於30000的正整數)。計算要攔截所有導彈最小需要配備多少套這種導彈攔截系統。

【輸入】
n顆依次飛來的高度(1≤n≤1000)。

【輸出】
要攔截所有導彈最小配備的系統數k。

【輸入樣例】
389 207 155 300 299 170 158 65
【輸出樣例】
2
【提示】
輸入:導彈高度: 4 3 2

輸出:導彈攔截系統k=1
【心得】其實就是找最長下降子序列的個數,從前往後一直找比前面小的數,直至所有的數都用完。
【AC程式碼】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int a[1005],vis[1005];
int main()
{
	int n,t,cnt=0,ma;
	while(cin>>a[n++]);
	for(int i=0;i<n;i++)
	{
		if(vis[i]==0)
		{
			cnt++;
			ma=a[i];
			for(int j=i+1;j<n;j++)
			{
				if(vis[j]==0&&a[j]<=a[i])
				{
					a[i]=a[j];
					vis[j]=1;	
				}
			}
		}	
	}
	cout<<cnt;
	return 0;
}

相關文章