最少攔截系統
怎麼辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這裏來求救了,請幫助計算一下最少需要多少套攔截系統.
貪心 思路:先把第一個攔截系統高度初始化爲第一個飛來的導彈的高度,然後讓下一個導彈與所有攔截系統比較過去,情況如下
從第一個攔截系統開始比較,
①若第 i 個導彈高度低於第 j 個攔截系統的高度,則將第 j 個攔截系統高度更新爲第 i 個導彈的高度;
②若第 i 個導彈高度比所有攔截系統的高度都高,則在加入一個攔截系統,該攔截系統高度就是第 i 個導彈的高度;
(這道題有說貪心又說動態規劃,動態規劃我是真理解不了,這個還好)
#include<stdio.h>
int d[100001],s[100001];
int main()
{
int n,i,j;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&d[i]);
int k=0;
s[0]=d[0];
for(i=1;i<n;i++) //第i個導彈,從第一個攔截系統開始,依次與所有攔截系統比較,
{
int flag=0;
for(j=0;j<=k;j++) // (接上一行註釋)直到有攔截系統高度大於導彈高度,
{
if(s[j]>=d[i])
{
s[j]=d[i];
flag=1;
break;
}
}
if(flag!=1)
{ //若第i個導彈高度高於所有攔截系統高度,則在加入一個攔截系統,
k++; //(接上一行註釋)該攔截系統高度就是第 i 個導彈的高度;
s[k]=d[i];
}
}
printf("%d\n",k+1);
}
return 0;
}