本文共 972 字,大约阅读时间需要 3 分钟。
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 128M,其他语言256M
现在有n个物品,每一个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人每一个人分到的物品的价值总和相同(个数可以不同,总价值相同即可),剩下的物品就需要扔掉,现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。
第一行输入一个整数 T,代表有 T 组测试数据。
对于每一组测试数据,一行输入一个整数 n ,代表物品的个数。
接下来 n 个数,a[i] 代表每一个物品的价值。
1<= T <= 10
1 <= n <= 15
1 <= a[i] <= 100000
对于每一组测试数据,输出一个答案代表最少需要扔的价值。
1
5 30 60 5 15 3020
样例解释,扔掉第三个和第四个物品,然后将第一个物品和第五个物品给第一个人,第二个物品给第二个人,每一个人分到的价值为
#includeusing namespace std;const int N = 1e5+10;int a[N];int res = 1e9;void dfs(int result1,int result2,int sum,int n, int i) { if(i==n) { if(result1==result2) { res = min(res, sum-result1-result2); } return; } dfs(result1+ a[i],result2,sum,n,i+1); dfs(result1,result2+a[i],sum,n,i+1); dfs(result1,result2,sum,n,i+1); }int main() { int t;scanf("%d",&t); while(t--) { int n;scanf("%d", &n); res = 1e9; int sum = 0; for(int i=0;i
转载地址:http://rfyzi.baihongyu.com/