zoukankan      html  css  js  c++  java
  • POJ2192

    题目大意

    给定三个字符串s1,s2,s3,判断由s1和s2的字符能否组成字符串s3,并且要求组合后的字符串必须是s1,s2中原来的顺序、

    题解

    用dp[i][j]表示s1的前i个字符和s2的前j个字符能否组成s3的前i+j个字符,有两个子问题,dp[i-1][j]和dp[i][j-1],如果dp[i-1][j]为真并且s1[i]==s3[i+j]或者dp[i][j-1]为真并且s2[j]==s3[i+j]则dp[i][j]=true;否则dp[i][j]=false;

    代码:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    #define MAXN 205
    bool dp[MAXN][MAXN];
    char s1[MAXN],s2[MAXN],s3[MAXN*2];
    int main()
    {
        int T,p=0;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s%s%s",s1+1,s2+1,s3+1);
            int len1=strlen(s1+1),len2=strlen(s2+1);
            dp[0][0]=true;
            for(int i=1; i<=len1; i++)
                if(dp[i-1][0]&&s1[i]==s3[i])
                    dp[i][0]=true;
            for(int i=1; i<=len2; i++)
                if(dp[0][i-1]&&s2[i]==s3[i])
                    dp[0][i]=true;
            for(int i=1; i<=len1; i++)
                for(int j=1; j<=len2; j++)
                    if((dp[i-1][j]&&s1[i]==s3[i+j])||(dp[i][j-1]&&s2[j]==s3[i+j]))
                        dp[i][j]=true;
                    else
                        dp[i][j]=false;
            printf("Data set %d: %s
    ",++p,dp[len1][len2]?"yes":"no");
        }
        return 0;
    }

  • 相关阅读:
    FPGA开发全攻略——FPGA选型
    FPGA开发全攻略——FPGA开发基本流程
    希尔伯特变换的物理意义
    无线通信方式
    FPGA DDR3调试
    FPGA调试光纤模块
    FPGA FIFO深度计算
    Xilinx FPGA LVDS应用
    电源设计注意事项
    波特图与零极点
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3252424.html
Copyright © 2011-2022 走看看