'''
測試資料:
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 ...