其实分组背包和多重背包一样,但实际上多重背包是分组背包的特殊情况,所以分组背包是无法进行优化的,也就是进行on3循环
题目:
原题链接:9. 分组背包问题 - AcWing题库
ac代码:
//多重背包上的全部拆分为1思想
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int dp[N];
int v[N], w[N], s[N];
int n, m;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> s[i];
for (int j = 1; j <= s[i]; j++) {
cin >> v[j] >> w[j];
}
for (int j = m; j >= 0; j--) {
for (int k = 1; k <= s[i]; k++) {
if (j >= v[k]) {
dp[j] = max(dp[j], dp[j - v[k]] + w[k]);
}
}
}
}
cout << dp[m] << endl;
return 0;
}