HDU

来源:互联网 发布:淘宝给了好评能删除吗 编辑:程序博客网 时间:2024/06/05 22:19

abcdefadebcf//yesabcdefabecdf//no
问一个串是否可以是另外两个串组成,

我一开始用的队列以为只要从头开始找就好,然后发现会有一样的情况,这个无法处理,然后就用了dfs会超时,

看题解之后知道原来这是个dp啊,我真是个傻子


在dp[i][j],里面存值,就是说 c的前i+j个 能不能由a的前i个和b的前j个构成

只要一个不行即全错

但是别忘记判断c分成的两部分是否等于ab ,



#include <iostream>#include<cstring>#include<algorithm>#include<string>using namespace std;const int maxn=4000+5;int dp[maxn][maxn];int main(){   string a,b,c;   while(cin>>a>>b>>c)   {       memset(dp,0,sizeof(dp));       if(c.size()!=b.size()+a.size())        cout<<"No"<<endl;       else       {          dp[0][0]=1;          for(int i=0;i<=a.size();i++)            for(int j=0;j<=b.size();j++)          {               if(a[i]==c[i+j])               {                  dp[i+1][j]|=dp[i][j];  或,0|1=1,0|0=0,1|1=1;               }                if(b[j]==c[i+j])               {               dp[i][j+1]|=dp[i][j];               }          }          if(dp[a.size()][b.size()])            cout<<"Yes"<<endl;          else            cout<<"No"<<endl;       }   }    return 0;}
今天竞选失败了,,,明天去杭州

0 0
原创粉丝点击