poj2192

【题意】

给定字符串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.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值