0 1揹包的遞迴解法

2021-10-09 01:47:39 字數 1009 閱讀 4582

(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個物體開始選。假如這個東西的重量小於揹包的重量,那麼現在你將面臨兩個選擇,一不...