http://acmpj.zstu.edu.cn/JudgeOnline/showproblem?problem_id=3286
#include<cstdio> #include<cstring> #include<algorithm> #define INF 1<<29 using namespace std; int dp[51][100003],c[11],v[11],n,w,p,m,i,j,k; int main(void) { while(scanf("%d%d",&n,&w)!=EOF) { memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { scanf("%d%d",&p,&m); for(j=1;j<=m;j++) scanf("%d%d",&c[j],&v[j]); for(j=0;j<=p;j++) dp[i][j]=-INF; for(j=p;j<=w;j++) dp[i][j]=dp[i-1][j-p]; for(k=1;k<=m;k++) for(j=w;j>=c[k];j--) dp[i][j]=max(dp[i][j],dp[i][j-c[k]]+v[k]); for(j=0;j<=w;j++) dp[i][j]=max(dp[i][j],dp[i-1][j]); } printf("%d\n",dp[n][w]); } return 0; }