题解:显然的双重背包。
#include <cstdio> int f[105][1005],v[105],w[105]; int main() { int t,n,m,l; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&l); for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&v[i]); for(int i=0;i<=m;i++) for(int j=0;j<=l;j++) { if(i==0)f[i][j]=0; else f[i][j]=-987654321; } for(int i=1;i<=n;i++) for(int j=m;j>=1;j--) for(int k=l;k>=w[i];k--) if (f[j-1][k-w[i]]+v[i]>f[j][k]) f[j][k]=f[j-1][k-w[i]]+v[i]; if (f[m][l]<0)f[m][l]=0; printf("%d ",f[m][l]); } return 0; }