(1)輸入物品個數n,揹包容量w;
(2)定義物品價值列表v,物品體積列表w;
(3)def rec(i,j): # 從第i個物品開始挑選總重小於j的部分
(4) res = 0;
(5) if i == n: # 剩餘物品為0
(6) return res
(7) elif j < w[i]: # 無法挑選該物品
(8) res = rec(i+1, j)
(9) else: # 嘗試挑選與不挑選兩種情況
(10) res = max(rec(i+1,j),rec(i+1,j-w[i])+v[i])
(11) return res
(12)print(rec(0,w))
**實現
n, w =4,
5w =[2
,1,3
,2]v =[3
,2,4
,2]def
rec(i,j)
:# 從第i個物品開始挑選總重小於j的部分
if i == n:
# 剩餘物品為0
return res
elif j < w[i]
:# 無法挑選該物品
res = rec(i+
1, j)
else
:# 嘗試挑選與不挑選兩種情況
res =
max(rec(i+
1,j)
,rec(i+
1,j-w[i]
)+v[i]
)return res
print
(rec(
0,w)
)
01揹包問題 C 解法
01揹包問題 假設現有容量m的揹包,有i個物品,重量分別為w 1 w 2 w i 價值分別為p 1 p 2 p i 將哪些物品放入揹包可以使得揹包的總價值最大?最大價值是多少?示例1 m 10,i 3,物品重量 價值 3 4 4 5 5 6 第一種 不帶備忘的自頂向下法 using system n...
0 1揹包(動態規劃解法)
動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每乙個解都對應於乙個值,我們希望找到具有最優值的解。動態規劃演算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。與分治法不同的是,適合於用動態規劃求解的...
01揹包 (遞迴解決)
01揹包,設定乙個揹包,他有乙個maxweight,現在你有n個物品,每個物品都有重量與其價值,現在要你求取得的最大價值。運用遞迴的思想,假如現在是從最後乙個開始選,如果這個東西的重量大於揹包的重量,那是不是可以從第n 1個物體開始選。假如這個東西的重量小於揹包的重量,那麼現在你將面臨兩個選擇,一不...