• 51Nod-1006 最长公共子序列Lcs


    题目链接

    Description

     给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。

     比如两个串为:
       abcicba
       abdkscab
     ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
     
    Input

     第1行:字符串A

     第2行:字符串B

      (A,B的长度 <= 1000)

    Output

     输出最长的子序列,如果有多个,随意输出1个。

     

    Input示例

     abcicba

     abdkscab

     

    Output示例
     abca
     
     
    代码如下:
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    const int N = 1005;
    int dp[N][N];
    char s1[N], s2[N], s[N];
    
    void getLCA(int i,int j,int k)
    {
        if (k<0) return;
        if (s1[i]==s2[j])
        {
            s[k] = s2[j]; //or s[k]=s1[i].
            getLCA(i-1,j-1,k-1);
            return;
        }
        if (dp[i - 1][j] >= dp[i][j - 1]) getLCA(i-1,j,k);
        else getLCA(i, j - 1, k);
    }
    
    int main()
    {
        while (scanf("%s", s1) != EOF)
        {
            scanf("%s", s2);
            int len_s1 = strlen(s1);
            int len_s2 = strlen(s2);
            memset(dp,0,sizeof(dp));
            for (int i = 0; i < len_s1; i++)
            {
                for (int j = 0; j < len_s2; j++)
                {
                    if (i == 0 || j == 0) {
                        dp[i][j] = (s1[i] == s2[j]);
                        if (i) dp[i][j] = max(dp[i][j], dp[i - 1][j]);
                        if (j) dp[i][j] = max(dp[i][j], dp[i][j - 1]);
                        continue;
                    }
                    dp[i][j] = max(dp[i][j-1], dp[i - 1][j]);
                    dp[i][j] = max(dp[i][j],dp[i-1][j-1]+(s1[i]==s2[j]));
                }
            }
            int len = dp[len_s1 - 1][len_s2 - 1];
            s[len] = '';
            getLCA(len_s1-1,len_s2-1,len-1);
            puts(s);
        }
    }
  • 相关阅读:
    缓动动画的原理
    高级各行高亮显示
    返回顶部的小火箭
    事件委托
    原型链和原型的继承
    对象的构建和构造函数
    call、apply和bind
    闭包
    九宫格封装好的组件 样式可以自由改哦
    嘿嘿嘿嘿 马上就有新任务了 提前封装一个转盘抽奖组件
  • 原文地址:https://www.cnblogs.com/chen9510/p/9739985.html
Copyright © 2020-2023  润新知