//cw表示已裝重量和,i表示考察到第i個物品,w表示揹包可承受重量,n表示物品個數,物品重量儲存在陣列a中,max表示當前最大值
void
bag(
int i,
int cw,
int w,
int n,
int*item,
int*max)
return;}
bag(i+
1, cw, w, n, item, max);if
(cw + item[i]
<=w)
bag(i+
1, cw+item[i]
, w, n, item, max)
;}
//cw表示已裝重量和,i表示考察到第i個物品,w表示揹包可承受重量,n表示物品個數,物品重量儲存在陣列a中,max表示當前最大值 ,mem[cw]記錄是否已經計算過,避免冗餘計算
void
bag(
int i,
int cw,
int w,
int n,
int*item,
int*max,
int mem[
10])return;}
if(mem[i]
[cw]==1
)return
; mem[i]
[cw]==1
;bag
(i+1
, cw, w, n, item, max, mem);if
(cw + item[i]
<=w)
bag(i+
1, cw+item[i]
, w, n, item, max, mem)
;}
//w表示揹包可承受重量,n表示物品個數,物品重量儲存在陣列a中,state[n][w+1]記錄每考察完一件物品state[weight]是否存在
intbag
(int w,
int n,
int*item, bool state[
11])for
(int j=
0; j<=w-item[i]
; j++)}
for(
int i=w; i>=
0; i--
)}
//w表示揹包可承受重量,n表示物品個數,物品重量儲存在陣列a中,state[w+1]記錄每考察完一件物品state[weight]是否存在
intbag
(int w,
int n,
int*item, bool state[11]
)for
(int j=
0; j<=w-item[i]
; j++)}
for(
int i=w; i>=
0; i--
)}
int
bag(
int w,
int n,
int*item,
int*value,
int state[
11])for
(int j=
0; j<=w-item[i]
; j++)}
}}int max =-1
;for
(int i=w; i>=
0; i--
)return max;
}
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 ...