HDU1501 dfs

像这样有维度的一定要记忆化啊。。。。。。。。。。。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<algorithm>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
char a[300],b[300],c[600];
int L1,L2,L3;
int vis[600][600];
bool _find(int pos,int s1,int s3)
{    
    if(pos==1&&a[s1]!=c[s3]) return false;
    if(pos==2&&b[s3-s1]!=c[s3]) return false;
    if(s3==L3) return true;
    if(s1+1<=L1&&!vis[s1+1][s3+1]&&_find(1,s1+1,s3+1))return true;   
    if(s3+1-s1<=L2&&!vis[s1][s3+1]&&_find(2,s1,s3+1)) return true;
    vis[s1][s3]=1;/*加这句就爆了,而且加在这里是表示无论是a到s3还是b到s3都搜索过了 */ 
    return false;
}
int main()
{
    int T,Case=0;
    scanf("%d",&T);
    while(T--){
        bool flag=false;
        memset(vis,0,sizeof(vis));
        printf("Data set %d: ",++Case);
        scanf("%s%s%s",a+1,b+1,c+1);
        L1=strlen(a+1);L2=strlen(b+1);L3=strlen(c+1);
        if(a[1]==c[1]&&_find(1,1,1))
            flag=true;
        if(b[1]==c[1]&&_find(2,0,1))
            flag=true;
        if(flag) printf("yes
");
        else printf("no
");
    }
    return 0;
} 
原文地址:https://www.cnblogs.com/hua-dong/p/7672436.html