乙個包可以背4kg的東西,現在有四件東西,重量分別為1kg,4kg,3kg,1kg,價值為:1500,3000,2000,2000;
現在要求你,在包裡背的東西價值最大,但是不能超過揹包的最大載重量。
**如下;
#幾件物品的重量
w = [0,1,4,3,1]
#幾件物品的價值
v= [0, 1500, 3000, 2000, 2000]
#物品數量
n = len(w) - 1
#包的載重量
m = 4
#建立乙個列表表示在包中的物品,元素是true時代表對應元素放入
x =
#放入包中的總價值
value = 0
#建立乙個矩陣,來表示在前i個物品中,當載重量是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]): #當揹包的大小大於物品的重量時,考慮放進去
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 = m
for i in range(n, 0, -1):
if table[i][j] > table[i- 1][j]: #如果多加一件物品之後,價值增大,就將這一件物品加入列表中
j = j - w[i] #此時為剩餘揹包的載重量
#返回最大價值,即**中最後一行最後一列的值
value = table[n][m]
return value
print("最大價值為:", str(dynamic(w, v, n, m, x)))
print("物品的索引:", x)
動態規劃 揹包問題
給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...
動態規劃 揹包問題
不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...
動態規劃 揹包問題
1 開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每...