AcWing 9.分组背包问题

题目链接:http://www.acwing.com/problem/content/9/

博客链接:https://www.cnblogs.com/marswithme/p/16778389.html


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n, m;
 4 int v[110][110], w[110][110], s[110];
 5 int dp[110];
 6 
 7 int main()
 8 {
 9     cin >> n >> m;
10     for(int i = 1; i <= n; i ++)
11     {
12         cin >> s[i];
13         for(int j = 0; j < s[i]; j ++)
14             cin >> v[i][j] >> w[i][j];
15     }
16 
17     // 由于每组物品只能选一个,所以可以覆盖之前组内物品的最优解来取最大值
18     for(int i = 1; i <= n; i ++)
19         for(int j = m; j >= 0; j --)
20             for(int k = 0; k <= s[i]; k ++)
21                 if(v[i][k] <= j)
22                     dp[j] = max(dp[j], dp[j - v[i][k]] + w[i][k]);
23 
24     cout << dp[m] << endl;
25 
26     return 0;
27 }

 

posted @ 2022-10-12 15:04  爱吃虾滑  阅读(15)  评论(0编辑  收藏  举报