HDU - 1257 最少攔截系統(思維+貪心)

題目鏈接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;
}

在這裏插入圖片描述
最艱辛的日子,總是耐人尋味。

發佈了187 篇原創文章 · 獲贊 7 · 訪問量 7870
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章