HDU 2159 FATE 二維費用完全揹包

2021-08-16 18:17:49 字數 641 閱讀 2626

傳送門

// 題意: 有k種怪物. 告訴你每種怪物殺死以後有a點經驗值, 同時主人的忍耐度減少b, 並且他最多殺死s只怪物, 問能否到達n點經驗值, 如果能到達輸出最多可能剩餘多少忍耐度.

// 思路:乍一看就是個完全揹包, 但是有s數量的限制, 所以就不是單純的一維了, 所以我們往二維上面想, 其實想一想就知道s可以作為第二維, 表示沒次殺死乙隻怪物後同時受到兩種傷害, 即b 和 1, 那麼就是很明顯二維費用揹包, 又因為怪物有無限多, 所以就是個二維費用完全揹包, dp[i][j] 表示 殺死 i 種怪物忍耐度為 j 時可以獲得的最大經驗值, 最後n^2遍歷一下就ok啦….

ac code

const

int maxn = 1e2+5;

int dp[maxn][maxn], v[maxn], w[maxn];

void solve()

fill(dp, 0);

for (int i = 1 ; i <= k ; i ++) }}

int ans = inf;

for (int i = 1 ; i <= s ; i ++) }}

printf("%d\n", ans == inf ? -1 : m - ans);

}}

HDU 2159 FATE 二維費用揹包

problem description 最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的...

HDU2159FATE(二維費用揹包)

解題思路 第二題二維費用揹包了,有些許的理解,狀態設計 dp z j 表示殺z個怪花費不超過j的情況下得到的最大經驗值 狀態轉移方程 dp z j max dp z j dp z 1 j cost i value i 相當於多一維限定殺敵數的花費,而你要多殺乙個人一定是從你殺的z 1個人的狀態推導過...

HDU 2159 FATE 二維費用揹包

problem description 最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的...