hdu2159二維費用揹包

2021-08-09 11:00:29 字數 1973 閱讀 1110

題目連線

揹包九講----二維費用揹包 問題

二維費用的揹包問題是指:對於每件物品,具有兩種不同的費用;選擇這件物品必須同時付出這兩種代價;對於每種代價都有乙個可付出的最大值(揹包容量)。問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價1和代價2,第i件物品所需的兩種代價分別為a[i]和b[i]。兩種代價可付出的最大值(兩種揹包容量)分別為v和u。物品的價值為w[i]。

演算法費用加了一維,只需狀態也加一維即可。設f[i][v][u]表示前i件物品付出兩種代價分別為v和u時可獲得的最大價值。狀態轉移方程就是:

f[i][v][u]=max

如前述方法,可以只使用二維的陣列:當每件物品只可以取一次時變數v和u採用逆序的迴圈,當物品有如完全揹包問題時採用順序的迴圈。當物品有如多重揹包問題時拆分物品。這裡就不再給出偽**了,相信有了前面的基礎,你能夠自己實現出這個問題的程式。

物品總個數的限制

有時,「二維費用」的條件是以這樣一種隱含的方式給出的:最多只能取m件物品。這事實上相當於每件物品多了一種「件數」的費用,每個物品的件數費用均為1,可以付出的最大件數費用為m。換句話說,設f[v][m]表示付出費用v、最多選m件時可得到的最大價值,則根據物品的型別(01、完全、多重)用不同的方法迴圈更新,最後在f[0..v][0..m]範圍內尋找答案。

對於01揹包,完全揹包,及由01揹包和完全揹包組成的多重揹包不太清楚可以看看

揹包九講

dp[i][jj]代表的意思是花費i的忍耐值殺了jj只怪所獲得的經驗值

這道題符合完全揹包,下面的兩種解法就是完全揹包的兩種解法

這道題基於o(vn)演算法的解法**:

for(int jj=1;jj<=s;jj++)加了乙個殺怪數的約束,這道題每種怪的殺怪數並不是無限的,只是未知的,這就是上面說的另乙個費用
1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7int dp[105][105];8

const

int inf=1e9;

9struct

moster

10moster[105

];14

intmain()

1534}35

}36}37

if(ans==inf)

38 printf("

-1\n");

39else

40 printf("

%d\n

",m-ans);41}

42return0;

43 }

基於狀態轉移方程  f[i][v]=max的解法

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7int dp[105][105];8

const

int inf=1e9;

9struct

moster

10moster[105

];14

intmain()

1534}35

if(dp[i][s]>=n)

3639}40

if(ans==inf)

41 printf("

-1\n");

42else

43 printf("

%d\n

",m-ans);44}

45return0;

46 }

if(dp[i][s]>=n)

花費i的忍耐值殺了s值怪後獲得的經驗值滿足公升級所需的經驗值就跳出迴圈

花費忍耐值就是最低的,題目只要求花費忍耐值最低,並不要求殺怪數(當然是最大殺怪數滿足題目的要求下)

hdu 2159(二維費用揹包)

hdu 2159 1 思路 二維費用揹包的模板題,主要是分清誰是揹包。這道題中經驗最大,所以經驗是揹包要得到的價值,忍耐度的消耗和怪的數量都是限制條件。所以用完全揹包即可 注意 限制忍耐度m,怪獸數量s 2 實現 include include includeusing namespace std ...

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...