題庫隨記 多重揹包問題 I

2021-10-08 08:16:59 字數 1120 閱讀 9853

n種物品和乙個容量是v的揹包。

第 i 種物品最多有 si

件,每件體積是 vi

,價值是 wi

。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。

輸入格式

第一行兩個整數,nv,用空格隔開,分別表示物品種數和揹包容積。

接下來有n行,每行三個整數 vi

,wi,si

,用空格隔開,分別表示第 i 種物品的體積、價值和數量。

輸出格式

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

資料範圍

0<n,v≤100

0,wi, si

≤100

輸入樣例

4 51 2 3

2 4 1

3 4 3

4 5 2

輸出樣例

10題解

核心思路即把多重揹包拆成01揹包,具體c++**如下:

#include

using

namespace std;

int a[

10005

],b[

10005];

intmain()

,w,v,s;

cin>>n>>m;

while

(n--)}

for(

int i=

1;i<=t;i++

)for

(int j=m;j>=a[i]

;j--

) dp[j]

=max

(dp[j-a[i]

]+b[i]

,dp[j]);

//直接套01揹包的板子

cout<

}

題庫隨記 01揹包問題

有n件物品和乙個容量是v的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有n行,每行兩個整數 vi,wi,...

多重揹包問題 I

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi...

多重揹包問題 I

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi...