# 题目大意

nn 组物品和一个容量 vv 的背包,每组物品有若干个,同一组内的物品最多只能选一个
每件物品的体积是 vi,jv_{i,j},价值是 wi,jw_{i,j},其中 ii 是组号,jj 是组内编号
求解,能装下的最大体积是?

# 数据范围

  • 0<N,V1000 < N,V \le 100
  • 0<Si1000 < S_i \le 100
  • 0<vi,j,wi,j1000 < v_{i,j}, w_{i,j} \le 100

# 思路

0101 背包思路类似,枚举第 ii 组中,第 kk 个物品要 / 不要即可

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void solve () {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> s[i];
for (int j = 1; j <= s[i]; j++)
cin >> v[i][j] >> w[i][j];
}

for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++)
for (int k = 0; k <= s[i]; k++) {
if (j >= v[i][k])
dp[i][j] = max(dp[i][j], dp[i - 1][j - v[i][k]] + w[i][k]);
}
}

cout << dp[n][m] << endl;
}