2309 遼哥遊戲

2021-09-21 07:25:54 字數 979 閱讀 1652

description

input

輸入包含多組(不超過100組)測試資料。

每組測試資料的第一行包含乙個正整數n,表示測碉堡的數目。接下來有n行,每行包括2個非負整數。第i+1行的2個整數分別表示第i個碉堡的防禦值和附加值。最後還有一行,為乙個整數,表示遼哥在遊戲開始時的初始攻擊力。

輸入以檔案結束符結束。

output

對每組資料,輸出一行,為乙個整數,表示遼哥可以拿到的最大分數。

sample input

310 9

25 30

8 750

5100 230

334 331

33 288

35 100

334 22

600sample output34

data constraint

hint

【資料範圍】

對20%的資料,有n<=10;

對40%的資料,有n<=100;

對100%的資料,有n<=1000,每個碉堡的防禦值和附加值均不會超過2000000。

題意:有n個碉堡,每次破壞碉堡要有破壞所有存在碉堡的攻擊力,且破壞後的攻擊力等於碉堡的附加值,遊戲開始前,可以刪去任意碉堡。

解析,一道顯然的貪心+dp,要列舉刪去的碉堡顯然太麻煩,所以這題要用到逆推的思想,先用dp求出有i個碉堡時需要的初始攻擊力,再列舉碉堡數進行判斷即可。

關於dp ,顯然碉堡防禦值與附加值的和越大的碉堡先摧毀潛力越大。且當前的防禦值必須要<=f[j-1]。

#include using namespace std;

int n,m,f[1001];

struct a

a[1001];

bool cmp(a a,a b)

cin>>m;

for (int i=n;i>=0;i--)

}} return 0;

}

Jzoj2309 遼哥遊戲

由於遼哥擁有強大的程式設計能力,他不費吹灰之力就改寫了那個遊戲。在遊戲開始前,他可以用炸彈消滅任意的碉堡,但是他不能通過這種方式來獲得分數。問題來了,在遊戲開始後,遼哥可以得到的最大分數是多少?嗯,又是那種dp套貪心的題目了 先考慮如果知道破壞碉堡順序,我們考慮如何最優 顯然令f i 表示一開始有i...

中山市選2011 遼哥遊戲

可以感受到這種題是按某個順序排序,然後就可以順著做了。對於一組方案,上下的順序應該是可以調整的。假設是a i b i a j b j g是j以下的防禦值和。目前可以,有b i g a j 不可以交換,則有b j a i 想辦法把g消掉。g a i g a j b j b i a i a j b j ...