0 1揹包問題 python

2021-09-26 22:28:06 字數 1142 閱讀 5765

'''

測試資料:

n = 6 物品的數量,

c = 10 書包能承受的重量,

w = [2, 2, 3, 1, 5, 2] 每個物品的重量,

v = [2, 3, 1, 5, 4, 3] 每個物品的價值

'''def

bag1

(n,c,w,v)

: value=[[

0for j in

range

(c+1)]

for i in

range

(n+1)]

#i 物品:1~i

for i in

range(1

,n+1):

#容量:1~j

for j in

range(1

,c+1):

#value[i][j] 物品1~i,容量1~j,的最優解

value[i]

[j]= value[i -1]

[j]if j >= w[i-1]

and value[i]

[j]<

(value[i -1]

[j - w[i -1]

]+ v[i -1]

):value[i]

[j]=

(value[i -1]

[j - w[i -1]

]+ v[i -1]

)return value

#優化空間複雜度

defbag2

(n,c,w,v)

: value =[0

for i in

range

(c+1)]

for i in

range(1

, n+1)

:#從後往前的原因: 如果從前往後,嘗試去掉當前物品重量時,最優解已經考慮當前物品。

for j in

range

(c,0,-

1):if j >= w[i-1]

: value[j]

=max

(value[j-w[i-1]

]+v[i-1]

, value[j]

)return value

0 1揹包問題python 0 1揹包問題1

鼓搗好久 終於了然了一些 0 1揹包問題描述 有乙個竊賊在偷竊一家商店時發現有n件物品,第i件物品價值為vi元,重量為wi,假設vi和wi都為整數。他希望帶走的東西越值錢越好,但他的揹包中之多只能裝下w磅的東西,w為一整數。他應該帶走哪幾樣東西?注 0 1揹包問題中 每件物品或被帶走,或被留下,需要...

揹包問題 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 ...