HDU 2159 FATE 二維揹包

2022-05-28 16:57:15 字數 691 閱讀 6402

這題是乙個二維揹包的題目,剛開始並沒有那樣去做,只開了一維的空間來儲存狀態,結果很多的資料都沒有跑過去。其實這題這樣來問的話可能就明了很多了,求在指定的容忍值和指定的殺怪數下,求最大能夠得到了經驗數,可能我們馬上就能想到二維揹包,一維為殺怪數,二維為容忍值,在做乙個完全揹包,可惜這題問的是在滿足公升級情況下最大的容忍值,這其實也能夠用上面構建的模型了解決。只要的求解的過程每次將得到的經驗值與給定的n進行比較,如果超過了n,那麼說明當前的方案能夠觸發公升級,再將此時剩餘的容忍值傳遞出來就可以了。總而言之,題目對攻擊次數和容忍值進行了限制,那麼我們就要對限制的量進行動態規劃。

**如下:

#include #include 

#include

#define maxn 105

using

namespace

std;

intn, m, k, s;

int exp[maxn], use[maxn], dp[2500][2500

];inline

int max(int x, int

y)int

dp()}}

}return

flag;

}int

main()

printf(

"%d\n

", dp());

}return0;

}

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 二維揹包

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