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 }