zoukankan      html  css  js  c++  java
  • poj 2192

    基本思想就是用d[a][b]表示字符串1的前个字符和字符串2的前b个字符能不能组成目标字符串,若是能则赋值为1,否则复制为零,具体代码如下:经典的动态规划

    #include<iostream>
    #include
    <string>
    #include
    <fstream>

    using namespace std;

    //char a[201],b[201],c[401];
    bool dp[201][401];

    void read(){
    // ifstream cin("in.txt");
    string a,b,c;
    int i,j,k;
    int cas;
    cin
    >>cas;
    for(k=1;k<=cas;k++)
    {
    cin
    >>a>>b>>c;
    //int n1=strlen(a);
    int n1=a.size();
    //int n2=strlen(b);
    int n2=b.size();
    memset(dp,
    0,sizeof(dp));
    //开始没有分清行和列的原因
    for(i=1;i<=n1;i++)
    if(a.substr(0,i)==c.substr(0,i))
    dp[
    0][i]=true;
    else
    dp[
    0][i]=false;
    for( i=1;i<=n2;i++)
    if(b.substr(0,i)==c.substr(0,i))
    dp[i][
    0]=true;
    else
    dp[i][
    0]=false;
    for(i=1;i<=n2;i++)
    for(j=1;j<=n1;j++)
    {
    if((dp[i][j-1]&&a[j-1]==c[i+j-1])||(dp[i-1][j]&&b[i-1]==c[i+j-1]))
    dp[i][j]
    =true;
    else
    dp[i][j]
    =false;
    }
    /*for(i=0;i<=n2;i++)
    {
    for(j=0;j<=n1;j++)
    {
    cout<<dp[i][j]<<" ";
    }
    cout<<endl;
    }
    */
    printf(
    "Data set %d: ",k);
    if(dp[n2][n1])
    cout
    <<"yes"<<endl;
    else
    cout
    <<"no"<<endl;

    }
    }

    int main(){
    read();
    system(
    "pause");
    return 0;
    }

      

  • 相关阅读:
    Java SE——线程介绍
    Vue
    Spring asm
    spring 自定义标签的实现
    Spring InitializingBean 接口以及Aware接口实现的原理
    值传递与引用传递
    redis学习
    ssm多数据源配置
    redis 启动
    json的设置
  • 原文地址:https://www.cnblogs.com/zhanglanyun/p/2113292.html
Copyright © 2011-2022 走看看