動態規劃 《部分揹包問題》 python實現

2021-08-24 20:19:38 字數 1070 閱讀 2736

接上兩篇

部分揹包問題:有n種重量和價值分別為wi和vi的物品。從這些物品中挑選出總重量不超過w的物品,第i種物品最多選mi個,求所有挑選方案中價值總和的最大值。

將部分揹包問題轉換成01揹包問題進行求解。

import sys

def track(d, c, w):

x =

for i in range(1, len(w)):

if d[i][c] != d[i - 1][c]:

c = c - w[i - 1]

if d[1][c] > 0:

return x

if __name__ == '__main__':

n = input()

w = sys.stdin.readline().strip().split(' ')

w = map(int, w)

v = sys.stdin.readline().strip().split(' ')

v = map(int, v)

m = sys.stdin.readline().strip().split(' ')

m = map(int, m)

dp = [[0] * (n + 1) for i in range(sum(m) + 1)]

ww =

vv =

for i in range(0, len(w)):

for j in range(1, m[i] + 1):

print ww

print vv

for i in range(1, len(ww) + 1):

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

if j >= ww[i - 1]:

dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - ww[i - 1]] + vv[i - 1])

else:

dp[i][j] = dp[i - 1][j]

print max(dp[len(ww)])

print track(dp, n, ww)

動態規劃 揹包問題

給定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 元。於是,他把每...