HDU:3779 Railroad

来源:互联网 发布:淘宝编辑宝贝教程视频 编辑:程序博客网 时间:2024/06/08 03:52

 

记忆化搜索。

 

使用递归实现,注意结束条件。

 

 

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int N1,N2;int a[1005]= {0},b[1005]= {0},c[2005]= {0};int vis[1005][1005];int solve(int i,int j,int pos){    if(pos==N1+N2) return vis[i][j]=1;    if(vis[i][j]!=-1) return vis[i][j];    if(i>N1||j>N2) return vis[i][j]=0;    if(a[i]!=c[pos]&&b[j]!=c[pos]) return vis[i][j]=0;    if(a[i]==c[pos])    {        if(solve(i+1,j,pos+1))            return vis[i][j]=1;    }    if(b[j]==c[pos])    {        if(solve(i,j+1,pos+1))            return vis[i][j]=1;    }    return vis[i][j]=0;}int main(){    while(scanf("%d%d",&N1,&N2)&&!(!N1&&!N2))    {        for(int i=0; i<N1; ++i) scanf("%d",&a[i]);        for(int i=0; i<N2; ++i) scanf("%d",&b[i]);        for(int i=0; i<N1+N2; ++i) scanf("%d",&c[i]);        memset(vis,-1,sizeof(vis));        if(solve(0,0,0))            puts("possible");        else            puts("not possible");    }    return 0;}


 

原创粉丝点击