平分物品

现在有n个物品,每一个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人每一个人分到的物品的价值总和相同(个数可以不同,总价值相同即可),剩下的物品就需要扔掉,现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。
第一行输入一个整数 T,代表有 T 组测试数据。

对于每一组测试数据,一行输入一个整数 n ,代表物品的个数。

接下来 n 个数,a[i] 代表每一个物品的价值。

1<= T <= 10
1 <= n <= 15
1 <= a[i] <= 100000

输入例子1:
1
5
30 60 5 15 30

输出例子1:
20

#include <bits/stdc++.h>

using namespace std;

int res = INT_MAX;
int sum = 0;

void sol(int a, int b, int begin, vector<int>& v) {
        if (a == b) {
        res = min(res, sum - a - b);
        }    
    if (begin == v.size()) {
        return;
    }
    sol(a + v[begin], b, begin + 1, v);
    sol(a, b + v[begin], begin + 1, v);
    sol(a, b, begin + 1, v);
}

int main() {
    int t;
    cin >> t;
    for (int i = 0; i < t; i++) {
        int n;
        cin >> n;
        sum = 0;
        res = INT_MAX;
        vector<int> v(n);
        for (int k = 0; k < n; k++) {
            cin >> v[k];
            sum += v[k];
        }
        sol(0, 0, 0, v);
        cout << res << endl;
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容