zoukankan      html  css  js  c++  java
  • 算法复习之::LCS最长公共子序列

    算法思想:dp[i][j]记录到A[i],B[j]的位置是Lcs的最大长度,

        转移方程:I:dp[i][j]=max(dp[i-1][j],dp[i][j]) (i>1)

             II:dp[i][j]=max(dp[i][j-1],dp[i][j]) (j>1)

             III:dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1) (A[i]==A[j],i>1,j>1)

        处理完后,再从dp[A.length][B.length]处开始回溯找出最大子序列。

    代码:

      

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    using namespace std;
    
    char A[100],B[100];
    int dp[110][110],cnt;
    char ans[110];
    
    void ini()
    {
        cnt=0;
        scanf("%s",A);
        scanf("%s",B);
        memset(dp,0,sizeof(dp));
        memset(ans,'',sizeof(ans));
    }
    void DP()
    {
        int a=strlen(A),b=strlen(B); 
        for(int i=0;i<a;i++)
            for(int j=0;j<b;j++)
        {
            if(i>0) dp[i][j]=max(dp[i-1][j],dp[i][j]);
            if(j>0) dp[i][j]=max(dp[i][j],dp[i][j-1]);
            if(A[i]==B[j])
            {
                if(i==0 || j==0) dp[i][j]=max(dp[i][j],1);
                else dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
            }
        }
    }
    void dfs(int i,int j)
    {
        if(i==0 || j==0)
        {
            if(A[i]==B[j]) ans[cnt++]=A[i];
            return;
        }
        if(A[i]==B[j] && dp[i][j]>dp[i-1][j-1] && dp[i][j]>dp[i-1][j] && dp[i][j]>dp[i][j-1])
        {
            ans[cnt++]=A[i];
            dfs(i-1,j-1);
        }
        else
        {
            if(dp[i][j]==dp[i-1][j-1]) dfs(i-1,j-1);
            else if(dp[i][j]==dp[i][j-1]) dfs(i,j-1);
            else dfs(i-1,j);
        }
    }
    int main()
    {
        ini();
        DP();
        dfs(strlen(A)-1,strlen(B)-1);
        for(int i=alen-1;i>=0;i--) cout<<ans[i];
        return 0;
    }
  • 相关阅读:
    2019 USP Try-outs 练习赛
    XDTIC2019招新笔试题 + 官方解答
    2019 ICPC 南昌网络赛
    ICPC 2019 徐州网络赛
    Berlekamp Massey算法求线性递推式
    ICPC 2018 徐州赛区网络赛
    CCPC 2019 网络赛 1006 Shuffle Card
    CCPC 2019 网络赛 1002 array (权值线段树)
    CCF-CSP题解 201803-4 棋局评估
    CCF-CSP题解 201803-3 URL映射
  • 原文地址:https://www.cnblogs.com/au-xiaotian/p/3372374.html
Copyright © 2011-2022 走看看