hdu 1501 Zipper
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1501
思路:题目要求第三个串由前两个组成,且顺序不能够打乱,搜索大法好
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<math.h> 5 #include<string.h> 6 #include<vector> 7 #include<queue> 8 #include<iterator> 9 #include<vector> 10 #include<set> 11 #define dinf 0x3f3f3f3f 12 typedef long long ll; 13 14 using namespace std; 15 16 char str1[1005],str2[1005],str3[1005]; 17 int flag,visit[1005][1005]; 18 19 void dfs(int i,int j,int k) 20 { 21 if(str1[i]==0 && str2[j]==0 && str3[k]==0) 22 { 23 flag=1; 24 return; 25 } 26 if(str1[i]!=str2[j] && str1[i]!=str3[k]) 27 return; 28 if(visit[i][j]) 29 return; 30 visit[i][j]=1; 31 if(str1[i]==str2[j]) 32 dfs(i+1,j+1,k); 33 if(flag) 34 return; 35 if(str1[i]==str3[k]) 36 dfs(i+1,j,k+1); 37 } 38 39 int main() 40 { 41 int t; 42 scanf("%d",&t); 43 for(int i=1;i<=t;i++) 44 { 45 scanf("%s %s %s",str2,str3,str1); 46 memset(visit,0,sizeof(visit)); 47 flag=0; 48 dfs(0,0,0); 49 printf("Data set %d: ",i); 50 if(flag) 51 printf("yes\n"); 52 else 53 printf("no\n"); 54 } 55 return 0; 56 }