Python基於動態規劃演算法解決01揹包問題例項

2022-10-04 20:36:24 字數 784 閱讀 9650

在01揹包問題中,在選擇是否要把乙個物品加到揹包中,必須把該物品加進去的子問題的解與不取該物品的子問題的解進行比較,這種方式形成的問題導致了許多重疊子問題,使用動態規劃來解決。n=5是物品的數量,c=10是書包能承受的重量,w=[2,2,6,5,4]是每個物品的重量,v程式設計客棧=[6,3,5,4,6]是每個物品的價值,先把遞迴的定義寫出來:

然後自底向上實現,**如下:

def bag(n,c,w,v):

res=[[-1 for j in range(c+1)] for i in range(n+1)]

for j in range(c+1):

res[0][j]=0

for i in range(1,n+1):

for j in range(1,c+1):

res[i][j]=res[i-1][j]

if j>=w[i-1] and res[i][j]res[i-1][j]:

x[i-1]=true

j-=w[i-1]

print('選擇的物品為:')

for i in range(n):

if x[i]:

www.cppcns.com print('第',i,'個,',end='')

print('')

if __name__=='__main__':

n=5c=10

w=[2,2,6,5,4]

v=[6,3,5,4,6]

res=bag(n,c,w,v)

show(n,c,w,res)

輸出結果如下:

python 動態規劃演算法

你有三枚硬幣,面值分別是a 2,5,7 每種硬幣足夠多,買一本書需要x 27元,如何用最少的硬幣組合正好付清,不需要對方找錢。1.確定狀態 假設最優解為k a1 a2 ak 1.1 最後一步 假設最優解為 27 ak 1.2 子問題 求27 ak最優解f x f x 2 1 f x 5 1 f x ...

Python 動態規劃演算法

假設你是乙個小偷,背乙個可裝4磅東西的揹包。可盜竊的商品有如下3件 音響,4磅,價值3000美元 膝上型電腦,3磅,價值2000美元 吉他,1磅,價值1500美元 為了讓盜竊的商品價值最高,你該選擇哪些商品?演算法 第9章動態規劃 w 0,4,3,1 商品的重量列表,w 0 佔位用 p 0,3000...

動態規劃演算法

一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...