题目大意:前两个字符串能否拼成第三个字符串,保证前两个字符串在拼接之后字母的相对位置不变。能就输出yes,否则输出no。
AC代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#define N 220
using namespace std;
char a[N], b[N], c[N<<1];
int dp[N][N];
int main()
{
int t, cas =1;
scanf("%d", &t);
while(t--){
getchar();
scanf("%s %s %s", a, b, c);
int la = strlen(a);
int lb = strlen(b);
memset(dp, 0, sizeof dp);
dp[0][0] = 1;
for(int i =0; i<=la; i++){
for(int j =0; j<=lb; j++){
if(i>0 && c[i+j-1]==a[i-1] && dp[i-1][j])
dp[i][j] = 1;
else if(j>0 && c[i+j-1]==b[j-1] && dp[i][j-1])
dp[i][j] = 1;
}
}
if(dp[la][lb])
printf("Data set %d: yes\n", cas++);
else
printf("Data set %d: no\n", cas++);
}
return 0;
}