每日打卡 还剩96道题
作者:
__NULL__
,
2024-08-10 09:18:18
,
所有人可见
,
阅读 81
分组背包问题
#include<bits/stdc++.h>
using namespace std;
const int MAXX = 1e3 + 5;
int n, v, a[MAXX][MAXX], b[MAXX][MAXX], dp[MAXX], s[MAXX];
int main(){
cin >> n >> v;
for(int i = 1; i <= n; i++){
cin >> s[i];
for(int j = 1; j <= s[i]; j++){
cin >> a[i][j] >> b[i][j];
}
}
for(int i = 1; i <= n; i++){
for(int j = v; j >= 0; j--){
for(int k = 1; k <= s[i]; k++){
if(j >= a[i][k]){
dp[j] = max(dp[j - a[i][k]] + b[i][k], dp[j]);
}
}
}
}
cout << dp[v];
return 0;
}