搜了一下有介绍的很详细的
http://www.cyqdata.com/cnblogs/article-detail-36815-english
----- ------ | 2013-0---- --:--:-- | Accepted | 1 1 | 0MS | 280K | G++ |
代码
#include<cstdio>
#include<cstring>
using namespace std;
int len1, len2;
char ch1[201], ch2[201], ch3[401];
bool isFind, dp[201][201];
void dfs(int l, int m, int n)
{
if(n == len1 + len2)
{
isFind = true;
return;
}
if(isFind || dp[l][m])
{
return;
}
if(l < len1 && ch1[l] == ch3[n])
{
dfs(l+1, m, n+1);
}
if(m < len2 && ch2[m] == ch3[n])
{
dfs(l, m+1, n+1);
}
dp[l][m] = true;
}
int main()
{
int M;
isFind = false;
//freopen("in.txt", "r", stdin);
scanf("%d", &M);
for(int tmp = 1; tmp <= M; ++tmp)
{
scanf("%s %s %s", ch1, ch2, ch3);
len1 = strlen(ch1);
len2 = strlen(ch2);
isFind = false;
memset(dp, 0, sizeof(dp));
dfs(0, 0, 0);
printf("Data set %d: %s\n", tmp, (isFind ? "yes" : "no"));
}
return 0;
}