LCS

原创 2016年08月29日 11:11:30

#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;
int n, m, k = 0;
int a1[120], a2[120];
int dp[110][110];
int LCS()
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            if(a1[i] == a2[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[n][m];
}
void Print(int i, int j)
{
    if(i == 0 || j == 0)
    {
        return;
    }
    if(dp[i][j] == dp[i - 1][j - 1] + 1)
    {
        Print(i - 1, j - 1);
        printf("%d\n", a1[i - 1]);
    }
    else if(dp[i][j] == dp[i - 1][j]){
        Print(i - 1, j);
    }else
    {
    Print(i, j - 1);
    }
}

int main()
{

    while(scanf("%d%d", &n, &m),m + n)
    {
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &a1[i]);
        }
        for(int i = 0; i < m; i++)
        {
            scanf("%d", &a2[i]);
        }
        memset(dp, 0, sizeof(dp));
        printf("Twin Towers #%d\n", ++k);
        printf("Number of Tiles : %d\n\n", LCS());
        Print(n, m);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

LCS算法的两种JAVA实现方式

给定字符串A,B Solution  I: 1.构造数组 c i  j 描述A串的前i位和B串的前J位的LCS长度 2.构造数组 trace  i  j  描述max相应位置得到的长度是由哪一步得出的...
  • Lyz1052
  • Lyz1052
  • 2015年06月14日 12:39
  • 694

LCS问题,JAVA实现

本文参照July的博客,第十一章,只给出个人理解和java实现
  • kringpin_lin
  • kringpin_lin
  • 2014年06月25日 20:49
  • 942

LCS算法的C++实现

最长公共子序列LCS的C++实现
  • zmq570235977
  • zmq570235977
  • 2015年11月15日 15:02
  • 1666

【动态规划】LCS算法:求两字符串最大公共字符串(连续)

LCS算法的应用 问题描述:求两字符串的连续最大公共子字符串 思路:根据上文LCS算法求解两字符串的最大公共子序列(不连续),可以得到求解连续子字符串的启示,如图所示,构造LCS矩阵vec,将两个...
  • yebanxin
  • yebanxin
  • 2016年08月12日 12:46
  • 1797

动态规划之LCS和LIS

(一)最长公共子序列 (二)dai
  • Netown_Ethereal
  • Netown_Ethereal
  • 2014年04月18日 14:44
  • 2178

LCS(最长公共子序列)和dp(动态规划)

参照:v_JULY_v        最长公共子序列定义:         注意最长公共子串(Longest CommonSubstring)和最长公共子序列(LongestCommon Subs...
  • u011479875
  • u011479875
  • 2015年04月30日 12:15
  • 975

最长公共子序列LCS递归解法

#include #include using namespace std; int row,col,**map,index,maxLen; char *record,*lcs; bool flag=...
  • lc0817
  • lc0817
  • 2015年03月17日 13:51
  • 2012

动态规划和递归求lcs

代码如下 #include #include #include using namespace std; int data[2000][2000]; string a = "3741a169n084...
  • u011915028
  • u011915028
  • 2016年05月15日 22:29
  • 369

动态规划-最长公共子字符串(LCS)

学习算法导论,看到动态规划的LCS,于是用C++将算法实现。 编程实现的过程中要特别注意**边界条件**和算法导论书上的实现有出入的地方,否则会出现**数组越界**和**LCS统计不完整**的问题。...
  • YanceyZ_DL
  • YanceyZ_DL
  • 2016年04月18日 16:48
  • 358

LCS 最长公共子序列并输出该序列

#include #include #include #include #include #include #include using namespace std; string s1...
  • u013573047
  • u013573047
  • 2014年08月13日 17:17
  • 940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LCS
举报原因:
原因补充:

(最多只允许输入30个字)