0 1揹包問題 C語言

2021-09-25 19:35:33 字數 1762 閱讀 3613

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