分组背包

 1 /**\
 2 每组物品有若干个,同一组内的物品最多只能选一个
 3 \**/
 4 #include <bits/stdc++.h>
 5 using  namespace std;
 6 const int N = 1e3 + 9;
 7 int n, m, v[N][N], w[N][N], s[N];
 8 int f[N];
 9 signed main() {
10     ios::sync_with_stdio(false);
11     cin >> n >> m;
12     for(int i = 1; i <= n; i++) {
13         cin >> s[i];
14         for(int j = 0; j < s[i]; j++) {
15             cin >> v[i][j] >> w[i][j];
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                     f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
23             }
24         }
25     }
26     cout << f[m];
27     return 0;
28 }

 

posted @ 2022-03-09 10:54  std&ice  阅读(48)  评论(0编辑  收藏  举报