zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    ping命令
    第一次手写Loadrunner测试脚本
    select into from和insert into select
    网络安全领域常说的payload
    如何查看LoadRunner日志
    验证码测试
    HTTP的请求和响应
    LoadRunner能录制微信登录过程么?
    切面编程AOP之KingAOP
    编程规范
  • 原文地址:https://www.cnblogs.com/lk1993/p/3249005.html
Copyright © 2011-2022 走看看