• DP_简单DP最长公共子序列(HDU_1159)


    最长公共子序列

    对于两个字符串 ic,id , 我们定义 dp[i][j] 数组来表示 ic 的第 i-1 个字符与 id 的第 j-1 个字符的公共序列长度。

    由于数组从 0 开始, 状态转移方程为 dp[i+1][j+1] = dp[i][j] + 1                        ic[i] == id[j]

                     dp[i+1][j+1] = max(dp[i+1][j],dp[i][j+1])   ic[i] != id[j]

    #include <stdio.h>
    #include <string.h>
    
    #define M 1002
    #define max(a,b) ((a) >= (b) ? (a) : (b))
    
    int dp[M][M];
    
    int lcs(char *ic, char *id)
    {
        int icLen = strlen(ic);
        int idLen = strlen(id);
        for(int i=0; i<icLen; i++)    dp[i][0] = 0;
        for(int j=0; j<idLen; j++)    dp[0][j] = 0;
        for(i=0; i<icLen; i++)
        {
            for(j=0; j<idLen; j++)
            {
                if(ic[i] == id[j])
                    dp[i+1][j+1] = dp[i][j] + 1;
                else
                    dp[i+1][j+1] = max(dp[i+1][j],dp[i][j+1]);
            }
        }
        return dp[i][j];
    }
    
    int main(int argc, char* argv[])
    {
        #ifdef __MYLOCAL
        freopen("in.txt","r",stdin);
        #endif
    
        char ic[M],id[M];
        while(scanf("%s%s",ic,id) != EOF)
        {
            printf("%d
    ",lcs(ic,id));
        }
    
        return 0;
    }
  • 相关阅读:
    jwt
    mybatis的回顾
    swagger
    MySQl总结
    Java异常
    常用Dos命令
    C++初级项目——机房预约系统
    C++中将数字型字符串转变为int类型的方法
    C++中int *a; int &a; int & *a; int * &a
    #define_CRT_SECURE_NO_WARNINGS的用法
  • 原文地址:https://www.cnblogs.com/lk1993/p/3249005.html
Copyright © 2020-2023  润新知