<span style="color:#cc33cc;">/* 1327.分水果 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一堆水果,需要分给两位小朋友。每个水果都有一个重量,你能给出一个方案,使得两位小朋友分得的重量差值最小吗? 输入 第一行输入水果个数n(1<=n<=20),接下来一行输入n个重量wi(0<=wi<=10^5,且wi为整型)。 输出 输出可以得到的最小差值。 输入样例 5 10 20 30 10 10 输出样例 By yuan.c 2014/6/22 */ #include<iostream> #include<stdio.h> #include<math.h> using namespace std; int n; int a[21]; int sum=0; int csum=0; int ssum=0; int num=0; int infer=1000000; int kabs(int d) { if(d>=0) return d; else return -d; } void backtrack(int k) { if(k>=n){ ssum=sum-csum; num=csum-ssum; if(kabs(num)<infer) infer=kabs(num); return;} csum+=a[k]; backtrack(k+1); csum-=a[k]; backtrack(k+1); } int main() { cin>>n; for(int i=0;i<n;i++){ scanf("%d",&a[i]); sum=sum+a[i]; } backtrack(0); cout<<infer<<endl; return 0; } </span>