動態規劃 揹包問題筆記

2021-07-27 09:38:40 字數 1100 閱讀 5132

理解動態規劃先從:

通過金礦模型介紹動態規劃

之後,可以通過下面部落格的表來理解:

動態規劃之01揹包問題(最易理解的講解)

程式實現時,思路和畫表時相同

給出程式:

# -*- coding: utf-8 -*-

# n為物品數量

# c為揹包重量

# w為每個物品重量

# v為每個物品價值

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-w[i-1]] + v[i-1]:

res[i][j] = res[i-1][j-w[i-1]] + v[i-1]

return res

def show(n, c, w, res):

print('最大價值為:',res[n][c])

x = [false for i in range(n)]

j = c

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

if res[i][j] > res[i-1][j]:

x[i-1] = true

j -= w[i-1]

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

for i in range(n):

if x[i]:

print('第',i,'個,',end='')

print('')

if __name__ == '__main__':

n = 4

c = 10

w = [5,2,8,3]

v = [7,3,10,4]

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

show(n,c,w,res)

給出程式

動態規劃 揹包問題

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