USACO 2.3 Zero Sum(DFS)

这个很简单。。中间细节处理,没想清楚,乱改了一下,终于1Y了。

 1 /*
 2  ID: cuizhe
 3  LANG: C++
 4  TASK: zerosum
 5 */
 6 #include <iostream>
 7 #include <cstdio>
 8 #include <cstring>
 9 #include <cmath>
10 #include <algorithm>
11 using namespace std;
12 int o[21],n;
13 int judge()
14 {
15     int i;
16     int sum = 0,temp = 1,z = 1;
17     for(i = 1;i <= n-1;i ++)
18     {
19        if(o[i] == 1)
20        {
21            temp = temp*10+i+1;
22        }
23        else if(o[i] == 2)
24        {
25            sum += z*temp;
26            temp = i+1;
27            z = 1;
28        }
29        else if(o[i] == 3)
30        {
31            sum += z*temp;
32            temp = i+1;
33            z = -1;
34        }
35     }
36     sum += z*temp;
37     if(sum == 0)return 1;
38     else return 0;
39 }
40 void dfs(int x)
41 {
42     int i;
43     if(x == n)
44     {
45         if(judge())
46         {
47             for(i = 1;i <= n-1;i ++)
48             {
49                 printf("%d",i);
50                 if(o[i] == 1)
51                 printf(" ");
52                 else if(o[i] == 2)
53                 printf("+");
54                 else if(o[i] == 3)
55                 printf("-");
56             }
57             printf("%d\n",n);
58         }
59         return ;
60     }
61     for(i = 1;i <= 3;i ++)
62     {
63         o[x] = i;
64         dfs(x+1);
65     }
66 }
67 int main()
68 {
69     freopen("zerosum.in","r",stdin);
70     freopen("zerosum.out","w",stdout);
71     scanf("%d",&n);
72     dfs(1);
73     return 0;
74 }
posted @ 2012-11-12 21:39  Naix_x  阅读(160)  评论(0编辑  收藏  举报