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