把忍耐值和殺怪數當成兩個揹包
dp[i][j]表示忍耐值為i,殺怪數為j時的經驗
dp[i][j]=max( dp[i][j], dp[i-b[i]][j-1]+a[i]);
顯然,它只是要求殺怪數不超過s,那麼dp[i][s],肯定是消耗忍耐值為i時,獲得的最大經驗了
所以從小到大列舉忍耐值m,當dp[i][s]>=n時,就break,保證了得出答案時m是較小的
#include
#include
#include
#include
using
namespace
std;
int main()}}
if(dp[x][s]>=n) break;
}if(x>m) printf("-1\n");
else
printf("%d\n",m-x);
}return
0;}
HDU 2159 FATE 完全揹包
參考資料 題意 公升級還需n點經驗值,還有m點忍耐度,殺乙個怪會得到相應的經驗,並減掉相應的忍耐度。當忍耐度降到0或者0以下時,最多隻殺s只怪。能公升級,輸出最大剩餘耐久。不能公升級,輸出 1。完全揹包概述 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解...
HDU 2159(FATE) 完全揹包
最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的經驗,並減掉相應的忍耐度。當忍耐度降到0...
hdu 2159 FATE 多重揹包
二維費用的揹包問題是指 對於每件物品,具有兩種不同的費用 選擇這件物品必須同時付出這兩種代價 對於每種代價都有 乙個可付出的最大值 揹包容量 問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價1和代價2,第i件物品所需的兩種代價分別為a i 和 b i 兩種代價可付出的最大值 兩種揹包容量 分...