動態規劃 多重揹包問題

2021-10-12 01:49:51 字數 1538 閱讀 1208

有 n 種物品和乙個容量為 w 的揹包,每種物品都有無限件可用。

第 i 種物品的重量是 w[i],價值是 v[i],最多有 s[i] 件

求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。

第一行兩個整數, n 和 v ,用空格隔開,分別表示物品總數和揹包的容積

接下來有 n 行。每行三個整數,w[i], v[i], s[i] 用空格隔開,分別表示第 i 種物品的體積和價值和數量

輸出乙個整數,表示最大價值。
4 5

1 2 3

2 4 1

3 4 3

4 5 2

10
和完全揹包問題不同的是這裡對物品的數量也有了限制。

如果不考慮優化時間和空間,我們其實可以簡單的將多重揹包問題轉化為有多個重量相同價值相同的物品的0-1揹包問題。這樣一想其實多重揹包就迎刃而解了。

還是**病

j 表示行

i 表示列

# n 代表物品種類的數量, w 代表揹包的容積

n, w =

map(

int,

input()

.split())

weight =

values =

for i in

range

(n):

w, v, s =

map(

int,

input()

.split())

count =

0while count < s:

count +=

1import numpy as np

box = np.zeros(

(len

(weight)

, w+1)

)for j in

range

(len

(weight)):

for i in

range

(w +1)

:if j ==0:

if i == weight[j]

: box[j]

[i]= box[j]

[i-weight[j]

]+ values[j]

else

: box[j]

[i]= box[j]

[i-1

]else

:if i >= weight[j]

: box[j]

[i]=

max(box[j-1]

[i], box[j-1]

[i-weight[j]

]+ values[j]

)else

: box[j]

[i]= box[j-1]

[i]print

(box)

動態規劃 多重揹包

動態規劃 多重揹包 時間限制 1 sec 記憶體限制 64 mb 提交 5 解決 5 提交 狀態 討論版 張琪曼 魔法石礦裡每種魔法石的數量看起來是足夠多,但其實每種魔法石的數量是有限的。李旭琳 所以我們需要改變裝包策略啦。現有n n 10 種魔法石和乙個容量為v 0第一行為兩個數字,即v和n。以下...

動態規劃 多重揹包

概念 多重揹包 有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,並且價值總和最大。這類問題即為多重揹包問題。把多重揹包當成01揹包 我們樸素的想法就是,對於某一種物品,我們看取乙個的時候,跑一...

動態規劃4 多重揹包

1.這裡區別一下三種揹包 1 01揹包 揹包有最大容量c,給出n種物品,每種物品僅僅乙個,有自己的重量和價值wi和vi,求揹包可裝下的最大價值 2 完全揹包 揹包有最大容量c,給出n種物品,每種物品無限個,有自己的重量和價值wi和vi,求揹包可裝下的最大價值 3 多重揹包 揹包有最大容量c,給出n種...