zoukankan      html  css  js  c++  java
  • DP_字串匹配(HDU_1501)

    最优子结构分析:如果A、B可以组成C,C最后一个字母必定是A或B的最后一个字母组成。
    C去除除最后一位,变成是否可以求出A-1和B或A和B-1是否可以构成C-1
    状态转移方程:用f[i][j] 表示A前 i 位和B前 j 位是否可以组成C的前i+j位        
        dp[i][j] = (dp[i-1][j] && A[i]==C[i+j]) || (dp[i][j-1] && B[j]==C[i+j])

    #include <stdio.h>
    #include <string.h>
    
    #define M 202
    
    char A[M],B[M],C[M*2];
    int dp[M][M];
    
    int run()
    {
        scanf("%s%s%s",A + 1,B + 1,C + 1);
        int aLen = strlen(A + 1);
        int bLen = strlen(B + 1);
        int cLen = strlen(C + 1);
        
        for(int i=1; i<=aLen; i++)
        {
            if(A[i] == C[i]) dp[i][0] = 1;
        }
        for(i=1; i<=bLen; i++)
        {
            if(B[i] == C[i]) dp[0][i] = 1;
        }
        for(i=1; i<=aLen; i++)
        {
            for(int j=1; j<=bLen; j++)
            {
                dp[i][j] = (dp[i-1][j] && A[i]==C[i+j]) || 
                           (dp[i][j-1] && B[j]==C[i+j]);
            }
        }
        return dp[aLen][bLen];
    }
    
    int main(int argc, char* argv[])
    {
        #ifdef __MYLOCAL
        freopen("in.txt","r",stdin);
        #endif
    
        int t;
        scanf("%d",&t);
        for(int i=1; i<=t; i++)
        {
            printf("Data set %d: %s
    ",i,run() ? "yes" : "no");
        }
    
        return 0;
    }
  • 相关阅读:
    ASCII码
    cron表达式学习
    mysql学习二、SQL常用数据类型
    mysql学习一 常用语句
    python学习
    搬砖
    新接触Linux 命令
    搬砖
    python encode decode
    201521123071 《JAVA程序设计》第十二周学习总结
  • 原文地址:https://www.cnblogs.com/lk1993/p/3227068.html
Copyright © 2011-2022 走看看