HDU2159FATE(二維陣列完全揹包)

2021-07-24 13:04:52 字數 996 閱讀 3175

problem description

最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的經驗,並減掉相應的忍耐度。當忍耐度降到0或者0以下時,xhd就不會玩這遊戲。xhd還說了他最多隻殺s只怪。請問他能昇掉這最後一級嗎?

input

輸入資料有多組,對於每組資料第一行輸入n,m,k,s(0 < n,m,k,s < 100)四個正整數。分別表示還需的經驗值,保留的忍耐度,怪的種數和最多的殺怪數。接下來輸入k行資料。每行資料輸入兩個正整數a,b(0 < a,b < 20);分別表示殺掉乙隻這種怪xhd會得到的經驗值和會減掉的忍耐度。(每種怪都有無數個)

output

輸出公升完這級還能保留的最大忍耐度,如果無法公升完這級輸出-1。

sample input

10 10 1 10

1 110 10 1 9

1 19 10 2 10

1 12 2

sample output

0

-1

要在容忍度範圍內,也要在殺怪數量範圍內,兩種限制條件,用二維陣列來實現

#include #include #include #define maxn 110

int f[maxn][maxn];

using namespace std;

//容忍度,殺怪數目的二維陣列

//=.=殺怪數目不超出範圍,容忍度也不超出範圍

int main()

if(f[j][q] >= n)

ans = max(ans, m - j);

}//if(dp) break;}}

printf("%d\n", ans);

}return 0;

}

hdu 2159 FATE (二維揹包)

解題報告 二維揹包的問題,如果沒有看過的話,建議去看看揹包9講中的第五個問題。本題中有每殺乙個怪,會獲得一定的經驗,同時減少一定的忍耐度,我用二維陣列dp來存放每次獲得的經驗值,b i 為每次消耗的忍耐 所以可以的到遞推關係式 dp i j max dp i b i j 1 dp i j 資料有點多...

hdu 2159 FATE 二維揹包

先求出不超過他的忍耐度殺完s只怪時能夠得到的經驗值,如果能公升完最後一級,再求用去多少忍耐度就能夠公升級,最後用他的忍耐度減去需要消耗的忍耐度即可 忍耐度當做體積,經驗值當做價值,怪的隻數當做物品數量 狀態轉移方程 f i j max i表示忍耐度,j表示殺怪數 忍耐度當做體積,經驗值當做價值,怪的...

HDU 2159 FATE 二維揹包

這題是乙個二維揹包的題目,剛開始並沒有那樣去做,只開了一維的空間來儲存狀態,結果很多的資料都沒有跑過去。其實這題這樣來問的話可能就明了很多了,求在指定的容忍值和指定的殺怪數下,求最大能夠得到了經驗數,可能我們馬上就能想到二維揹包,一維為殺怪數,二維為容忍值,在做乙個完全揹包,可惜這題問的是在滿足公升...