這題是乙個二維揹包的題目,剛開始並沒有那樣去做,只開了一維的空間來儲存狀態,結果很多的資料都沒有跑過去。其實這題這樣來問的話可能就明了很多了,求在指定的容忍值和指定的殺怪數下,求最大能夠得到了經驗數,可能我們馬上就能想到二維揹包,一維為殺怪數,二維為容忍值,在做乙個完全揹包,可惜這題問的是在滿足公升級情況下最大的容忍值,這其實也能夠用上面構建的模型了解決。只要的求解的過程每次將得到的經驗值與給定的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 二維揹包
這題是乙個二維揹包的題目,剛開始並沒有那樣去做,只開了一維的空間來儲存狀態,結果很多的資料都沒有跑過去。其實這題這樣來問的話可能就明了很多了,求在指定的容忍值和指定的殺怪數下,求最大能夠得到了經驗數,可能我們馬上就能想到二維揹包,一維為殺怪數,二維為容忍值,在做乙個完全揹包,可惜這題問的是在滿足公升...