1/*0-1揹包遞迴*/2#include2 #include 3
using
namespace
std;45
int w=;//
物品重量陣列
6int v=;//
物品價值陣列
7int contain=5;//
揹包容量
8int y[4]=;//
解向量,y[i]=1表示選取物品,y[i]=0表示不選取物品910
int f(int n,int
contain)
1115
else
1625
else
2635
else
3640}41
}42}43
}44intmain()
4553
}54 cout<<"
maximum value is
"55return0;
5657 }
1/*0-1揹包非遞迴
*/2 #include "
stdio.h"3
#define n 10045
intmain()631
32void knapsack(int v,int w,int c,int n,int m[1000
])33
//v:價值,w:重量,c:揹包可容納重量,n:物品件數
34//
m:存放最大總價值的陣列
35//
m[i][j]表示揹包容量為j,可選擇物品為i,i+1,...,n時0-1揹包問題的最優值
3667
//到此為止,已經求出可選擇物品為(第n-1件、第n件),(第 n-2件、第n-1件、第 n件),...,(第 2件、第 3件...第 n 件) 在重量 k(0<=k<=c)情況下的最優值
68//
接下來是求可選擇物品為(第 1件、第 2件...第 n件) 在重量 k(0<=k<=c)情況下的最優值嗎?
69//
no!只需求可選擇物品為(第 1件、第 2件...第 n件) 在重量 c(真正的揹包容量)下的最優值
70 m[1][c]=m[2][c]; //
假設不放入第一件物品
71 t=w[1
];72
if(w[1]<=c) m[1][c]=m[1][c]>=m[2][c-t]+v[1]?m[1][c]:m[2][c-t]+v[1
];73
//可以容納第一件物品的情況下,該如何選擇?74}
75}7677
void traceback(int v,int w,int c,int n,int m[1000],int
x)78
93if(m[n][c]>0) //
單獨判斷是否選擇了第 n件物品
94 x[i]=1
;
95else x[i]=0
;96 }
簡單揹包問題 遞迴非遞迴實現
include define max 100 int w max int ans int s,int m if b return 0 else int ans int s,int m stacknode stacknode stack max int i,j,t,top,nofail t 0 top...
01揹包問題 遞迴實現
問題描述 乙個揹包裡可以放入重量為 weight 的物品,現有 n 件物品的集合 s,其中物品的重量分別為 w0,w1.求解 假設如果不選最後一件物品 其重量是 如果選擇最後一件物品,那麼如果 def knap weight,wlist,n weight為包的容量,wlist是乙個所有重量的表,n為...
C 實現0 1揹包問題 動態規劃 非遞迴
前兩天在華為筆試題的時候遇到了這個問題,做完之後發現自己有欠缺,回來趕緊複習一下 不說太多了,直接把 貼出來,任何繁瑣的理論都不如 看著直接,我在 中進行了詳細的注釋,保證只要看懂並理解了關鍵的幾句 及注釋,0 1揹包問題就變得很簡單,原理什麼的網上的部落格很多,給大家分享幾個比較好的參考鏈結 c ...