您的位置:首页 > 其它

Zipper hdu 1501

2011-08-12 17:22 288 查看
这题首先就把题意理解错啦。。然后就把问题搞的相当复杂。。

这题的关键是记忆化。。对以前已经搜索过的状态标记下。。剪枝。

还有就是判断DFS结束条件和yes, no...

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>

char ch1[410], ch2[410], ch3[500], flag;
int len1, len2, len;
int hash[410][410];

void DFS(int n, int l1, int l2)
{
if (flag)
return ;

if (n == len)
{   flag = 1;
return;
}
if (hash[l1][l2])
return;
if (ch3
== ch1[l1] && l1 < len1)
DFS(n + 1, l1 + 1, l2);
if (ch3
== ch2[l2] && l2 < len2)
DFS(n + 1, l1, l2 + 1);

hash[l1 ][l2] = 1;
}

int main( )
{
int T, l = 0;
scanf("%d", &T);
while(T--)
{
flag = 0;
l++;
scanf("%s",ch1);
scanf("%s",ch2);
scanf("%s",ch3);
memset(hash, 0, sizeof(hash));
len1 = strlen(ch1);
len2 = strlen(ch2);
len =  strlen(ch3);
printf("Data set %d: ", l);
DFS(0, 0, 0);
if (flag)
puts("yes");
else
puts("no");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: