题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1501
题意:判断能不能由前前两段字符组成第三段字符
转移方程: dp[i][j] = (dp[i][j-1]&&str2[j-1]==str3[i+j-1]) || (dp[i-1][j] && str1[i-1]==str3[i+j-1]))
str1[]的前I个字符和str2[]的前j个字符组成str3的前i+j字符的前提是
str1[]的前I-1个字符和str2[]的前j个字符组成str3的前i+j-1字符,或者
str1[]的前I个字符和str2[]的前j-1个字符组成str3的前i+j-1字符.
#include <stdio.h>
#include <string.h>
char str1[210],str2[210],str3[410];
int dp[210][210];
int main()
{
int i,j;
int len1,len2;
int test,cout;
scanf("%d",&test);
cout = 0;
while(test--)
{
scanf("%s %s %s",str1,str2,str3);
len1 = strlen(str1);
len2 = strlen(str2);
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(i = 0; i <= len1; i++)
{
for(j = 0; j <= len2; j++)
{
if(i>0 &&dp[i-1][j] && str1[i-1]==str3[i+j-1])
dp[i][j] = 1;
if(j>0 &&dp[i][j-1] && str2[j-1]==str3[i+j-1])
dp[i][j] = 1;
}
}
printf("Data set %d: ",++cout);
if(dp[len1][len2])
printf("yes\n");
else printf("no\n");
}
return 0;
}