题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1501
#include<string.h>
#include<stdio.h>
int dp[210][210];
char str1[210],str2[210],str3[410];
int main()
{
int T,i,j,l1,l2,Case=1;
scanf("%d",&T);
while(T--)
{
scanf("%s%s%s",str1,str2,str3);
l1=strlen(str1);
l2=strlen(str2);
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(i=0;i<=l1;i++)
for(j=0;j<=l2;j++)
{
if(i>0&&str1[i-1]==str3[i+j-1]&&dp[i-1][j]) dp[i][j]=1;
//dp[i-1][j]代表的是第str1[i-1]个字符匹配的状态:
// 字符串第str1[i]个字符虽然匹配,但是要要在前一个字符匹配的前提下才能匹配
if(j>0&&str2[j-1]==str3[i+j-1]&&dp[i][j-1]) dp[i][j]=1;//同上
}
if(dp[l1][l2]) printf("Data set %d: yes\n",Case++);
else printf("Data set %d: no\n",Case++);
}
return 0;
}