分组背包问题
问题
有$N$组物品和一个容量是$V$的背包。
每组物品有若干个,同一组内的物品最多只能选一个。
每件物品的体积是$v_{ij}$,价值是$w_{ij}$,其中$i$是组号,$j$是组内编号。
求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。
输出最大价值。
分析
状态转移方程
$$
f[i,j] = \max_{k=0}^{s_i}\{f[i-1,j-v_{ik}]+w_{ik}\}
$$
代码模板
for (int i=1; i<=n; i++) {
for (int j=m; j>=0; j--) {
for (int k=0; k<s[i]; k++) {
if (v[i][k] <= j) {
f[j] = max(f[j],f[j-v[i][k]]+w[i][k]);
}
}
}
}