01揹包問題(C 版)

2021-07-05 17:08:26 字數 863 閱讀 4355

01揹包問題是最經典的動態規劃類問題。

已知:有乙個容量為v的揹包和n件物品,第i件物品的重量是weight[i],收益是cost[i]。

限制:每種物品只有一件,可以選擇放或者不放

問題:在不超過揹包容量的情況下,最多能獲得多少價值或收益

//01揹包問題遞迴求法

#include using namespace std;

int c[100];

int v[100];

int x[100];

//int w=20;

int packrecursion(int i,int m,int n)

int putin=packrecursion(i+1,m-c[i],n)+v[i];

int putout=packrecursion(i+1,m,n);

if(c[i]<=m&&putin>putout)

else }

void updatex(int i,int n,int w)

else

else

} }int main()

int enjoy=packrecursion(0,w,n);

int cost=0;

updatex(0,n,w);

for(int i=0;i

//揹包問題,非遞迴解法

#include using namespace std;

int knapsack(int c,int v,int n,int w,int k[11])//n條資料,容量w

int enjoy=knapsack(c,v,n,w,k);

updatex(c,x,n,w,k);

cout<<"enjoy:"<

01揹包問題 C

有i件物品和乙個容量為volume total的揹包。第n件物品的體積是c n 價值是w n 體積是指物品在揹包中佔據的位置,即放入的物品的總體積不能揹包總容量 每種物品僅有一件,可以選擇放或不放。求解將哪些物品裝入揹包可使價值總和最大。輸入物品的總個數i,和揹包的最大容積volume total ...

揹包問題 01揹包問題

n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...

揹包問題 01揹包

有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。01揹包中的 01 就是一種物品只有1件,你可以選擇放進去揹包即1,也可以選擇不放入揹包中即0。include include using namespace std const int ...