/*requires that each optimal, pre-accumulative K-optimal solution is not to be weighed*/#include<iostream>#include<cstdio>#include<cstring>#defineMAXN 210#defineMAXM 5010#defineMAXK 60using namespacestd;intN,M,K,W[MAXN],V[MAXN],F[MAXM][MAXK];intX[maxk],y[maxk],a,b,z,ans;intinit () {intx=0;BOOLf=0;Chars=GetChar (); while(s<'0'|| S>'9'){if(s=='-') f=1; s=GetChar ();} while(s>='0'&&s<='9') {x=x*Ten+s-'0'; s=GetChar ();} if(f)return-X;returnx;}intMain () {//freopen ("bags.in", "R", stdin); //freopen ("Bags.out", "w", stdout);K=init (); M=init (); n=init (); for(intI=1; i<=n;i++) W[i]=init (), v[i]=init (); Memset (F, -,sizeof(f)); f[0][1]=0; for(intI=1; i<=n;i++) { for(intj=m;j>=w[i];j--) { for(intL=1; l<=k;l++) {X[l]=F[j][l]; Y[L]=f[j-w[i]][l]+V[i]; } A=b=z=1; X[k+1]=y[k+1]=-1; while(z<=k&& (x[a]!=-1|| y[b]!=-1)) { if(X[a]>y[b]) f[j][z]=x[a],a++; Elsef[j][z]=y[b],b++; Z++; } } } for(intI=1; i<=k;i++) ans+=F[m][i]; printf ("%d\n", ans); return 0;}
Cogs 53 Multi-person backpack