人間夜行

一切の有為の法 夢幻泡影の如し

RQNOJ 72 拔河比赛

| 评论

//这道题一开始还不知道怎么做,后来一想,要是两组体重差最小,
//必然某一组极度接近总重的一半。显然又是一道背包。
#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;
}

评论