完全揹包問題(空間優化,列印路徑)

2021-09-04 09:50:07 字數 879 閱讀 1495

//hdu1114

//寫在前面:這裡給出hdu1114題作為樣例

//完全揹包問題:有n種物品,每i種物品的體積為vc[i],價值為w[i],數量不限

//有一容量為c的揹包,問如何裝能使揹包的體積最大

//當使用二維陣列時的狀態轉移方程為:dp[i][v]=max(dp[i-1][v],dp[i][v-vc[i]]+w[i])

//空間優化後的狀態轉移方程變為:dp[v]=max(dp[v],dp[v-vc[i]+w[i])

//這裡又分為裝滿和不裝滿問題;這時dp陣列的初始化將會有差別

//不裝滿是dp陣列全為0,dp[0]=0;裝滿時dp=inf(inf為極大值或極小值)dp[0]=0;

#include #include #define maxn 505

#define inf 0x3f3f3f3f

using namespace std;

int p[maxn];int w[maxn];

int dp[10005];

int path[maxn][10005];//列印路徑陣列

int min(int a,int b)

}} if(dp[f-e]!=inf)cout<<"the minimum amount of money in the piggy-bank is "<=0&&j>=0)

else i--;

} cout<<'\n';*/ }}

/*310 110

21 1

30 50

10 110

21 1

50 30

1 62

10 3

20 4

*/​

完全揹包問題 一維空間優化

有 n 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。第 i 種物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行兩個整數...

完全揹包問題的優化

有 n 種物品和乙個容量為 v 的揹包,每種物品都有無限件可用。放入第 i 種物品的體積是 ci,價值是 wi。求將哪些物品裝入揹包,可使這些物品的耗費的費用總和不超過揹包容量,且重量總和最大。首先,要將 ci 大於 v 的物品剔除。其次,對於任意正整數 i 和 j,如果有 ci cj 且 wi w...

完全揹包問題 列印揹包中的物品

與0 1揹包問題不同的是,每個物品可以任意次放,只要小於總容量就行,這裡列印裝進去的物品,還列印每種物品裝了多少次 如下 include include include using namespace std int main int argc,char argv vectorresult capa...