hdu 1501 Zipper(记忆化DFS)
思路:从c中搜出两个串a,b 并且c串刚好搜完,因为题目保证 lena+lenb=lenc
#define N 402
int vis[N][N];
char a[N],b[N],c[N];
int la,lb,lc;
bool DFS(int x,int y,int len)
{
if(len==lc) return 1;
if(vis[x][y])return 0;
vis[x][y]=1;
if(c[len]==a[x])
{
if(DFS(x+1,y,len+1))
return 1;
}
if(c[len]==b[y])
{
if(DFS(x,y+1,len+1))
return 1;
}
return 0;
}
int main()
{
int T;
cin>>T;
for(int i=1;i<=T;i++)
{
scanf("%s%s%s",a,b,c);
printf("Data set %d: ",i);
la=strlen(a);
lb=strlen(b);
lc=strlen(c);
CLS(vis,0);
if(DFS(0,0,0))
printf("yes\n");
else
printf("no\n");
}
return 0;
}