洛谷原题:分组背包问题 - 洛谷
题解:
#include<bits/stdc++.h>
using namespace std;
long long n,v,si[1000000],vi[1000][1000],wi[1000][1000],f[1000][1000];
int main(){
cin>>n>>v;
for(int i=1;i<=n;i++){
cin>>si[i];
for(int j=1;j<=si[i];j++){
cin>>vi[i][j]>>wi[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=v;j++){
f[i][j]=f[i-1][j];
for(int k=1;k<=si[i];k++)
if(j>=vi[i][k]){
f[i][j]=max(f[i][j],f[i-1][j-vi[i][k]]+wi[i][k]);
}
}
}
cout<<f[n][v];
}