hdoj2159 二位費用揹包

2022-03-01 01:21:59 字數 976 閱讀 8260

題意:

略; 推薦看一下那個揹包九講,第五講非常清晰啊。

原文:

演算法 費用加了一維,只需狀態也加一維即可。設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]範圍內尋找答案。

在本題的話,就是把經驗作為價值,忍受值作為乙個費用,個數也是。

然後在裡面利用的是完全揹包的思想吧。揹包九講能更好的去幫助自己利用這三個揹包思想。

//#include 

#include

#include

#include

#include

using

namespace

std;

typedef __int64 ll;

const

int n=1e2+10;

int v[n],c[n];

int dp[n][n];

int main()}}

//printf("%d\n",ans);

if(dp[m][s]puts("-1");

else

printf("%d\n",ans);

}return

0;}

HDOJ 2159 FATE (二維揹包)

思路 根據揹包9講的二維揹包問題。摘自揹包九講 問題 二維費用的揹包問題是指 對於每件物品,具有兩種不同的費用 選擇這件物品必須同時付出這兩種代價 對於每種代價都有乙個可付出的最大值 揹包容量 問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價1和代價2,第i件物品所需的兩種代價分別為a i ...

hdu2159二維費用揹包

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

hdu 2159(二維費用揹包)

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