UVA 10624 - Super Number(DFS)
看错题了。。。。。导致WA 5 6次重改后(期间还打了次表发现表错了),先交了次,TLE,然后打表恶搞之。。。
400+的表不长。。一下为打表的代码。应该有剪枝,唉,自己想不出来啊。。。
1 #include <stdio.h> 2 #include <string.h> 3 int p[41],z,n; 4 int mod(int x) 5 { 6 int i,mo = 0; 7 for(i = 1; i <= x; i ++) 8 { 9 mo = (mo*10 + p[i])%x; 10 } 11 if(mo) 12 return 0; 13 else 14 return 1; 15 } 16 void dfs(int step,int m) 17 { 18 int i; 19 if(z) return ; 20 if(step > m) 21 { 22 z = 1; 23 for(i = 1; i <= m; i ++) 24 printf("%d",p[i]); 25 return ; 26 } 27 if(step == 1) 28 { 29 for(i = 1; i <= 9; i ++) 30 { 31 p[step] = i; 32 dfs(step+1,m); 33 } 34 } 35 else if(step < n) 36 { 37 for(i = 0; i <= 9; i ++) 38 { 39 p[step] = i; 40 dfs(step+1,m); 41 } 42 } 43 else if(step >= n) 44 { 45 for(i = 0; i <= 9; i ++) 46 { 47 p[step] = i; 48 if(mod(step)) 49 dfs(step+1,m); 50 } 51 } 52 return ; 53 } 54 int main() 55 { 56 int t,m,num = 0; 57 freopen("a.txt","w",stdout); 58 for(n = 1; n <= 30; n ++) 59 { 60 for(m = n+1; m <= 30; m ++) 61 { 62 z = 0; 63 scanf("%d%d",&n,&m); 64 printf("else if(n == %d&& m == %d)printf(\"",n,m); 65 dfs(1,m); 66 if(!z) printf("-1"); 67 printf("\");\n"); 68 } 69 } 70 return 0; 71 }