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 ...