//这道题一开始还不知道怎么做,后来一想,要是两组体重差最小, //必然某一组极度接近总重的一半。显然又是一道背包。 #include <stdio.h> int max(int a,int b) { if(a>b) return a; else return b; } int main() { int n,w[101]={0},allsum=0,i,r,f[10001]; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&w[i]); allsum+=w[i]; } int top=allsum/2; for(r=0;r<=top;r++) if(r<w[1]) f[r]=0; else f[r]=w[1]; for(i=2;i<=n;i++) for(r=0;r<=top;r++) if(r<w[i]) f[r]=f[r]; else f[r]=max(f[r],f[r-w[i]]+w[i]); printf("%d",allsum-2*f[top]); return 0; }