淺析python實現(xiàn)動態(tài)規(guī)劃背包問題
一個包可以背4kg的東西,現(xiàn)在有四件東西,重量分別為1kg,4kg,3kg,1kg,價值為:1500,3000,2000,2000;
現(xiàn)在要求你,在包里背的東西價值最大,但是不能超過背包的最大載重量
#幾件物品的重量
w = [0,1,4,3,1]
#幾件物品的價值
v= [0, 1500, 3000, 2000, 2000]
#物品數(shù)量
n = len(w) - 1
#包的載重量
m = 4
#建立一個列表表示在包中的物品,元素是True時代表對應(yīng)元素放入
x = []
#放入包中的總價值
value = 0
#建立一個矩陣,來表示在前i個物品中,當(dāng)載重量是j時,放入包中的最大價值,table[i][j]
table = [[0 for i in range(m+1)] for j in range(n+1)]
def dynamic(w,v,n,m,x):
#計算table矩陣
for i in range(1, n+1): #代表物品一件一件的考慮
for j in range(1, m+1): #代表子背包的大小一點一點的考慮
if (j >= w[i]): #當(dāng)背包的大小大于物品的重量時,考慮放進(jìn)去
table[i][j] = max(table[i-1][j], table[i-1][j-w[i]] + v[i])
else:
table[i][j] = table[i -1][j] #如果放不進(jìn)去,就繼承之前的價值
#遞推裝入背包中的物體,尋找跳變的地方,從最后結(jié)果開始逆推
j = m
for i in range(n, 0, -1):
if table[i][j] > table[i- 1][j]: #如果多加一件物品之后,價值增大,就將這一件物品加入列表中
x.append(i)
j = j - w[i] #此時為剩余背包的載重量
#返回最大價值,即表格中最后一行最后一列的值
value = table[n][m]
return value
print("最大價值為:", str(dynamic(w, v, n, m, x)))
print("物品的索引:", x)
PS:python動態(tài)規(guī)劃之背包問題
import numpy as np
def bag(weight,values,weight_cont):
num = len(weight)
weight.insert(0,0)
values.insert(0,0)
bag = np.zeros((num+1,weight_cont+1),dtype=np.int)
for i in range(1,num+1):
for j in range(1,weight_cont+1):
if j >= weight[i]:
bag[i][j] = max(bag[i-1][j],bag[i-1][j-weight[i]]+values[i])
else:
bag[i][j] = bag[i][j-1]
return bag[-1][-1]
if __name__ == '__main__':
weight = [1, 2, 4, 10, 12]
values = [1200, 1500, 2000, 1300, 2500]
weight_cont = 20
re = bag(weight,values,weight_cont)
print(re)
到此這篇關(guān)于python實現(xiàn)動態(tài)規(guī)劃背包問題的文章就介紹到這了,更多相關(guān)python動態(tài)規(guī)劃背包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用Python寫腳本,實現(xiàn)完全備份和增量備份的示例
下面小編就為大家分享一篇用Python寫腳本,實現(xiàn)完全備份和增量備份的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python利用pandas進(jìn)行數(shù)據(jù)合并詳解
當(dāng)使用Python中的pandas庫時,merge函數(shù)是用于合并(或連接)兩個數(shù)據(jù)框(DataFrame)的重要工具。它類似于SQL中的JOIN操作,下面我們就來看看它的具體操作吧2023-11-11
Python + Flask 實現(xiàn)簡單的驗證碼系統(tǒng)
這篇文章主要介紹了Python + Flask 制作一個簡單的驗證碼系統(tǒng),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10

