题目:http://poj.org/problem?id=2192
题意:从a、b串组合出c串,如果可以,输出“yes”,否则输出“no”
组合规则:不能乱序,只能顺序从a.b串中去字符。
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
char a[201],b[201],c[402];
/*
flag[i][j]== true ;表示 a的前i个,b的前j个可以组合出c的前i+j个
flag[i][j]== false;表示 a的前i个,b的前j个不可以组合出c的前i+j个
*/
bool flag[201][201];
int main()
{
int T,la,lb,i,j,cc=1;
scanf("%d",&T);
do
{
scanf("%s%s%s",a,b,c);
la = strlen(a);
lb = strlen(b);
memset(flag,false,sizeof(flag));
flag[0][0] = true;//都是空的,起点设置为true
for(i = 0 ; i <= la ; ++i )
for(j = 0 ; j <= lb ; ++j )
{
if( i>0 && flag[i-1][j] && a[i-1] == c[i+j-1]) flag[i][j] = 1;
if( j>0 && flag[i][j-1] && b[j-1] == c[i+j-1]) flag[i][j] = 1;
}
printf("Data set %d: ",cc++);//刚开始把这个变量设置为c,害我调试好久
if(flag[la][lb])
puts("yes");
else
puts("no");
}while(--T);
//system("pause");
return 0;
}