现在有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;
}