问题描述:
解法:
这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。
这样就可以对每一组转化为 01背包问题
int dp[110],v[110],w[110]; int main() { int n,m; cin >> n >> m; for (int i = 0;i < n;i++) { int s; cin >> s; for (int j = 0;j < s; j++) { cin >> v[j] >> w[j]; } for (int j = m;j >= 0;j--) { for (int k = 0;k < s;k++) { if (j >= v[k]) dp[j] = std::max(dp[j],dp[j-v[k]]+w[k]); } } } cout << dp[m] << endl; return 0; }
原文:https://www.cnblogs.com/-Ackerman/p/12250611.html