AcWing 9. 分组背包问题 C
原题链接
中等
作者:
LaChimere
,
2021-06-03 15:44:21
,
所有人可见
,
阅读 252
C
#include <stdio.h>
#define MAXSIZE 105
#define max(a,b) ((a)>(b)?(a):(b))
int N, V, v[MAXSIZE], w[MAXSIZE], dp[MAXSIZE];
int main() {
scanf("%d%d", &N, &V);
int Si;
for (int i = 1; i <= N; ++i) {
scanf("%d", &Si);
for (int j = 1; j <= Si; ++j) {
scanf("%d%d", v+j, w+j);
}
for (int j = V; j >= 0; --j) {
for (int k = 1; k <= Si; ++k) {
if (j >= v[k]) {
dp[j] = max(dp[j], dp[j-v[k]]+w[k]);
}
}
}
}
printf("%d\n", dp[V]);
return 0;
}