HDU 1171 Big Event in HDU
题解:将背包总量分为两份,之后多重背包即可
#include <cstdio> #include <cstring> int f[300000],w[1000],t[1000]; int main() { int n; while(scanf("%d",&n),n>=0) { int v=0; for(int i=1; i<=n; i++){ scanf("%d%d",&w[i],&t[i]); v+=w[i]*t[i]; } memset(f,0,sizeof f); for(int j=1; j<=n; j++) for(int k=1; k<=t[j]; k++) for(int i=v/2; i>=k*w[j]; i--) if (f[i-w[j]]+w[j]>f[i]) f[i]=f[i-w[j]]+w[j]; printf("%d %d\n",v-f[v/2],f[v/2]); } return 0; }
愿你出走半生,归来仍是少年