http://poj.org/problem?id=2192

方法一:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[210];
char b[210];
char c[210];
bool can[210][210];

void init() {
   for (int i = 0; i < 210; i ++) {
    for (int j = 0; j < 210; j ++) {
        can[i][j] = false;
    }
   }
   can[0][0] = true;
}

bool work(int len_a, int len_b) {
   for (int i = 0; i <= len_a; i ++) {
    for (int j = 0; j <= len_b; j ++) {
        if (i == 0 && j == 0) can[i][j] = true;
        else {
            if (i >= 1 && c[i+j-1] == a[i-1]) {
                can[i][j] = can[i][j] || can[i-1][j];
            }
            if (j >= 1 && c[i+j-1] == b[j-1]) {
                can[i][j] = can[i][j] || can[i][j-1];
            }
        }
    }
   }
return can[len_a][len_b];
}
int main() {
    int n;
    scanf("%d", &n);
        for (int i = 1; i <= n; i ++) {
            scanf("%s", a);
            scanf("%s", b);
            scanf("%s", c);
            init();
            int len_a = strlen(a);
            int len_b = strlen(b);
            printf("Data set %d: ", i);
            if (len_a + len_b != strlen(c)){
                printf("no\n");
                continue;
            }
            work(len_a, len_b);
            if (can[len_a][len_b]) printf("yes\n");
            else
                printf("no\n");
        }
return 0;
}

还可以用深搜:注意对于c【】中的字母如果在a【】和b【】中都有的话,两个都要搜索。

举个例子:

a   cat    acat


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值