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 }

你可能感兴趣的:(USACO)