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 }

 

posted @ 2016-08-08 14:57  pter  阅读(186)  评论(0编辑  收藏  举报