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 }
posted @ 2012-06-25 18:58  Naix_x  阅读(282)  评论(0编辑  收藏  举报