zb的生日
时间限制: 3000 ms | 内存限制:65535 KB
难度: 2
第一行输入西瓜数量N (1 ≤ N ≤ 20)
第二行有N个数,W1, …, Wn (1 ≤ Wi ≤ 10000)分别代表每个西瓜的重量 </dd> <dt> 输出 </dt> <dd> 输出分成两堆后的质量差 </dd> <dt> 样例输入 </dt> <dd>
5 5 8 13 27 14</dd> <dt> 样例输出 </dt> <dd>
3</dd> <dt> 来源 </dt> <dd> ural </dd> <dd> 【代码】:
#include<stdio.h> #include<math.h> #include<limits.h> int n, total, mi, sum; int weight[25]; void dfs(int cur, int sum){ if(n == cur) return; int t; t=(int)fabs(total - sum * 2); //差值=(total-c小加)-c小加 if(t < mi) mi = t; dfs(cur+1, sum); //存在两种情况,一种分一种不分,这一种是不分,下面的是分 dfs(cur+1, sum+weight[cur]); } int main() { int i; while(scanf("%d", &n)!=EOF) { total = 0; for(i=0;i<n;i++) { scanf("%d", &weight[i]); total += weight[i]; } mi = INT_MAX;//系统默认最大值 dfs(0, 0); if(n==0) printf("0\n"); else printf("%d\n", mi); } return 0; }
</dd> </dl>