【题意】
给定字符串A字符串B字符串C,问A和B是否能按顺序交错成为C
【输入】
第一行n,表示数据组数
每组数据一行,三个字符串,中间用空格分隔
【输出】
对于数据i,输出"Data set "i": ","yes"或"no“
数据弱了一些,dp即可通过
f[i][j]表示A的前i个和B的前j个是否能拼成C的前i+j个
program poj2192;
var
a,b,c:ansistring;
n,i,j,k:longint;
f:array [0..201,0..201] of boolean;
begin
readln(n);
for k:=1 to n do
begin
readln(c);
a:=copy(c,1,pos(' ',c)-1);
delete(c,1,pos(' ',c));
b:=copy(c,1,pos(' ',c)-1);
delete(c,1,pos(' ',c));
fillchar(f,sizeof(f),false);
f[0,0]:=true;
for i:=0 to length(a) do
for j:=0 to length(b) do
if i+j<>0 then
begin
if (i>0)and(a[i]=c[i+j]) then
f[i,j]:=f[i,j] or f[i-1,j];
if (j>0)and(b[j]=c[i+j]) then
f[i,j]:=f[i,j] or f[i,j-1];
end;
write('Data set ',k,': ');
if f[length(a),length(b)] then writeln('yes')
else writeln('no');
end;
end.