HDU2159 二維完全揹包問題

2021-08-21 20:09:20 字數 742 閱讀 7170

hdu2159_二維完全揹包問題

輸入有:經驗,忍耐度,怪物種數,限制殺怪數 每一種怪物對應獲得的經驗值和消耗的耐久值

輸出:剩下的最大忍耐度

限制:忍耐度,殺怪個數

在這裡把忍耐度看成揹包的容量,殺怪個數限制作為第二維

dp[i][j]表示在揹包容量為i的時候,放了j件物品所產生的價值

接下來就是迴圈問題

先遍歷每乙個物品(怪物)  i

然後遍歷體積(耐久值)正序遍歷——完全揹包   j

然後遍歷殺怪的個數(正序遍歷)完全揹包   k

得出dp[j][k]  = max(dp[j][k],dp[j-cost[i]][k-1] + data[i]);

在這裡要記錄一下,要保留最大的耐久值,我們就要儲存,當dp[j][k]所產生的經驗值大於等於公升級所需要的經驗值時小號的最小耐久值

最後一減就ok了

#include #include #include #include #define inf 0xffffff

using namespace std;

const int maxn = 200;

int dp[maxn][maxn];//dp[i][j]表示忍耐度為i的情況下殺j個怪獸所獲得的經驗

int data[maxn];

int cost[maxn];

int main()

if(res == inf)cout<<-1<

HDU 2159 二維完全揹包

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

hdu2159 二維完全揹包

如題 第一次遇到多維的揹包,其實只是多種因素同時限制最終揹包值。比如這一題,二維,加一重迴圈並找準上一層的狀態就行了。一看就能會。include include include using namespace std define max a,b a b?a b int c 105 int w 10...

DP 二維揹包 HDU 2159

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