傳送門
// 題意: 有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會得到相應的...