動態規劃揹包問題

2021-09-12 22:59:36 字數 1189 閱讀 5723

乙個包可以背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 元。於是,他把每...