HDU 1501 Zipper(DFS)

题目链接

不加记忆化 搜索 TLE,加上15ms.....

 1 #include <stdio.h>
 2 #include <string.h>
 3 char str1[201],str2[201],str3[402];
 4 int p[201][201];
 5 int z,len;
 6 void dfs(int a,int b,int x)
 7 {
 8     if(z) return ;
 9     if(p[a][b]) return ;
10     p[a][b] = 1;
11     if(x > len-1)
12     {
13         z = 1;
14         return ;
15     }
16     if(str1[a] == str3[x])
17     {
18         dfs(a+1,b,x+1);
19 
20     }
21     if(str2[b] == str3[x])
22     {
23         dfs(a,b+1,x+1);
24     }
25 }
26 int main()
27 {
28     int num = 0,t;
29     scanf("%d%*c",&t);
30     while(t--)
31     {
32         scanf("%s%s%s",str1,str2,str3);
33         memset(p,0,sizeof(p));
34         num ++;
35         len = strlen(str3);
36         z = 0;
37         dfs(0,0,0);
38         printf("Data set %d: ",num);
39         if(z)
40         printf("yes\n");
41         else
42         printf("no\n");
43     }
44     return 0;
45 }
posted @ 2012-07-29 10:29  Naix_x  阅读(141)  评论(0编辑  收藏  举报