最少攔截系統 HDU 1257 貪心

2021-09-14 06:41:24 字數 1128 閱讀 7467

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

怎麼辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這裡來求救了,請幫助計算一下最少需要多少套攔截系統.

輸入若干組資料.每組資料報括:飛彈總個數(正整數),飛彈依此飛來的高度(雷達給出的高度資料是不大於30000的正整數,用空格分隔)

對應每組資料輸出攔截所有飛彈最少要配備多少套這種飛彈攔截系統.

sample input

8 389 207 155 300 299 170 158 65

sample output

2題意:

題解:經典的攔截系統問題, 這道題目的最優做法應該是貪心

對於貪心問題, 我們先從思維上下手, 考慮我們需要最少的系統, 那麼就一定要使得每個系統都最大限度的物盡其用

然後我們再思考, 由於順序無法更改, 乙個很高的飛彈我們必然要為之設定系統, 我們不如直接記錄下每個系統的最低高度,

然後依次遍歷飛彈, 把每個飛彈都放入最低高度最小的, 如果都放不下, 則開闢新的系統

經驗小結:

對於貪心問題要先從思維入手

#include

#include

#include

using

namespace std;

#define ms(x, n) memset(x,n,sizeof(x));

typedef

long

long ll;

const ll maxn =3*

1e4+10;

int n, a[maxn]

;int b[maxn]

, len =1;

intmain()

}if(best==0)

b[++len]

= a[i]

;else

b[best]

= a[i];}

cout << len << endl;

}return0;

}

HDU1257 最少攔截系統 貪心

題目鏈結 在kuangbin的dp專題裡找到的,然而有點坑的是並不是用dp做的。此題用貪心才是正解啊 對於每一發飛彈,若已經存在攔截系統,且可以攔截此飛彈,那麼重新開一台是沒意義的,因為達到的效果和通過降低現有攔截系統高度來攔截所達到的效果是一樣的,當然若攔截不了那就另當別論去開一台,問題是有多台可...

HDU 1257 最少攔截系統 貪心

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

hdu 1257 最少攔截系統 (貪心)

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