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 }