題目鏈接:https://vjudge.net/contest/347031#problem/I
分析:
給定的順序是導彈依次飛來的順序。所以不能排序。
剛開始想着從第一個數開始,若後面的數小於前面的數說明系統依次都能打到。若某一個高度大於前面的高度,系統的數量就++。
舉個例子:
5發炮彈依次打來。
對於1和2可以用一個攔截系統。
攔截系統1的最高攔截高度爲炮彈2的高度。
對於炮彈3,需要重新開一個攔截系統2。
攔截系統2的最高攔截高度爲炮彈4的高度。
對於炮彈5,若按照上述思想需要重新開一個攔截系統。
但是可以看出攔截系統1的高度就可以把炮彈5攔截了,不需要重新開新的攔截系統。
用攔截系統1攔截後,攔截系統1的最大高度縮小爲炮彈5的高度。
代碼:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e4+10;
int n,high[N];
int sum[N];
int main()
{
while(~scanf("%d",&n))
{
for(int i=1; i<=n; i++)
scanf("%d",&high[i]);
int num=1;
sum[1]=high[1];
for(int i=1; i<=n; i++)
{
int f=0;
for(int j=1; j<=num; j++)
{
if(high[i]<=sum[j])
{
f=1;
sum[j]=high[i];
break;
}
}
if(!f)
{
num++;
sum[num]=high[i];
}
}
printf("%d\n",num);
}
return 0;
}
最艱辛的日子,總是耐人尋味。