解题思路:DFS搜索
描述-
输入
-
多组测试数据(<=1500)。数据以EOF结尾
第一行输入西瓜数量N (1 ≤ N ≤ 20)
第二行有N个数,W1, …, Wn (1 ≤ Wi ≤ 10000)分别代表每个西瓜的重量
输出
- 输出分成两堆后的质量差 样例输入
-
5 5 8 13 27 14
-
7
-
10 5 3 4 3 1 4
样例输出
-
3
-
0
参考博客:http://www.cnblogs.com/jiaolinfengacm/archive/2011/12/18/2291811.html
#include<stdio.h>
#include<math.h>
int min, sum, total, n;
int weight[25];
void get_next(int cur, int sum, int a[])
{
int t;
if(cur == n)
return;
t = (int)fabs(total - sum - sum);
if(t < min)
min = t;
get_next(cur + 1, sum, a);
get_next(cur + 1, sum + a[cur], a);
}
int main()
{
int i;
while(scanf("%d", &n) != EOF)
{
total = 0;
for(i = 0; i < n; i++)
{
scanf("%d", &weight[i]);
total += weight[i];
}
min = 200001;
get_next(0, 0, weight);
printf("%d\n", min);
}
return 0;
}