zb的生日

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 using namespace std;
 7 int w[30],vis[30];      //w表示重量
 8 int n,sum,ans,mim,m;    //sum表示总重量,ans表示分给甲的重量。m表示分给乙的重量,mim表示最小结果
 9 
10 void dfs(int cur)
11 {
12     if(cur==n)
13     {
14         m=sum-ans;
15         if(abs(m-ans)<mim)
16         {
17             mim=abs(m-ans);
18         }
19     }
20     else
21     {
22         for(int i=cur;i<n;i++)
23         {
24             ans+=w[i];
25             vis[i]=1;
26             dfs(i+1);
27             vis[i]=0;
28             ans-=w[i];
29         }
30     }
31 }
32 int main()
33 {
34     int k;
35     while(~scanf("%d",&n))
36     {
37         sum=ans=0;
38         mim=100000;
39         for(int i=0;i<n;i++)
40         {
41             scanf("%d",&w[i]);  sum+=w[i];
42         }
43         memset(vis,0,sizeof(vis));
44         if(n==1)
45         {
46             printf("%d
",w[0]);    continue;
47         }
48         else
49         {
50             if(n==2)
51             {
52                 printf("%d
",abs(w[0]-w[1]));   continue;
53             }
54             else
55                 dfs(0);     
56         }
57         printf("%d
",mim);
58     }
59     return 0;
60 }
61         
View Code
原文地址:https://www.cnblogs.com/WDKER/p/5392461.html