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