有 n
nn 組物品和乙個容量是 v
vv 的揹包。
每組物品有若干個,同一組內的物品最多只能選乙個。
每件物品的體積是 vij
v_vi
j,價值是 wij
w_wi
j,其中 i
ii 是組號,j
jj 是組內編號。
求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。
輸出最大價值。
輸入格式
第一行有兩個整數 n
nn,v
vv,用空格隔開,分別表示物品組數和揹包容量。
接下來有 n
nn 組資料:
每組資料第一行有乙個整數 s
is_i
si,表示第 i
ii 個物品組的物品數量;
每組資料接下來有 s
is_i
si 行,每行有兩個整數 vij
v_vi
j,w ij
w_wi
j,用空格隔開,分別表示第 i
ii 個物品組的第 j
jj 個物品的體積和價值;
輸出格式
輸出乙個整數,表示最大價值。
資料範圍
0
<
0<
0<
n,v≤
100≤100
≤100
0
<
0<
0<
s_i≤
100≤100
≤100
0
<
0<
0<
v_,
,,w_≤
100≤100
≤100
輸入樣例
3 5
21 2
2 41
3 41
4 5
輸出樣例:
8
乙個組有s個物品,則該組有s+1種選擇:選0個~選s個
需要找到每個組的最優解,在01揹包迴圈中的最裡層再加一層迴圈,找到最優解
for
(int i =
0; i < n; i ++
)for
(int j = m; j >= v; j --
)f[j]
= max
#include
#include
using namespace std;
const
int n =
110;
int n, m;
int f[n]
,v[n]
, w[n]
;int
main()
cout << f[m]
<< endl;
return0;
}
分組揹包問題
有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空格隔開,分別表...
分組揹包問題
分組揹包問題 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空...
分組揹包問題
分組揹包問題 已知乙個體積為m的揹包,共有n種物品,每一種物品有s個,每個的體積v和權值w不一定相同,要求從每一種物品中選某件物品,使得在總體積不超過m的情況下,所選的總權值最大。如下 已優化成一維滾動陣列 include include define n 110 using namespace s...