uva 562

简单背包   容量为所有硬币和的一半

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>

using namespace std;

int a[110];
int f[51000];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(f, 0, sizeof(f));
        int n;
        scanf("%d",&n);
        int sum = 0;
        for(int i = 0; i < n; i++)
        {
            scanf("%d",&a[i]);
            sum += a[i];
        }
        int V = (sum+1)/2;
        for(int i = 0; i < n; i++)
        {
            for(int j = sum; j >= a[i]; j--)
            {
                f[j] = max(f[j], f[j-a[i]]+a[i]);
            }
        }
        printf("%d\n",abs(2*f[V]-sum));
    }
    return 0;
}


posted @ 2013-07-26 20:50  xlc2845  阅读(80)  评论(0编辑  收藏  举报