最长公共子序列(不连续)

实际问题中也有比较多的应用,比如,论文查重这种,就是很实际的一个使用方面。

这个应该是最常见的一种了,不再赘述,直接按照转移方程来进行:

按最普通的方式就是,直接构造二维矩阵,两个序列分别是Ai 以及 Bj ,c[i,j]就表示的是第一个序列的从开始到第Ai个元素,以及第二个序列的从开始到第Bj个元素,这两部分序列的最长的公共子序列,如果ai==bj,则斜对角加1,否则就是前面和上面的元素中最大的那一个,就是按照这种方式,一层层的向下递推。

最长连续公共子序列

就是strict-LCS的情形,

这里c[I,j]的定义与原来有所不同,这里的才c[I,j]指的是最后一个元素为xi时候,并且xi==yj时候的的长度。

不论前面的情况如何,如果xi与yj不相等,就将c[I,j]归为0 其实转移方程也还是比较简易的:

就是把累加性的部分去掉就好了。

PAT1040

这个最终也可以转化成LCS的思路来求解 如果一个序列中间有连续的对称部分的话 不过这个是最长连续的公共子序列。

最长递增公共子序列

1045

这个是比较典型的

这个可以有多种解法

一个是转化成LCS,一个是就用最本来的LIS的递归的方法,可以参考这个:

http://blog.csdn.net/joylnwang/article/details/6766317

其实转化成LCS,可以算成一种变形:

http://blog.csdn.net/tiantangrenjian/article/details/19921051

这个可以算成是公共部分可以重复的最长公共子序列,但是这个重复的部分也应该是其中某个序列中的,整体来说,就是这个题目的背景。

这个时候递归的时候:
还是通过矩阵向后递推,只是:

先要求出max元素,如果当前的元素是c[I,j],那么c[i-1][j] c[I,j-1] c[i-1,j-1]中的最大一个,把它称为max元素,通常像这样:

1.  max = len[i-1][j-1];

2. if(max < len[i][j-1])max = len[i][j-1];

3. if(max < len[i-1][j])max = len[i-1][j];      //先求出左边、上边、左上边 三个值中的最大值

A[i]=B[j]的时候 直接才c[I,j]=max+1

A[i]!=B[j]的时候 直接c[I,j]=max

注意这里直接放成max 根据max往后走。

对于这个题,还是用这种方法比较好,要是用最简单的LCS就是按照color出现的顺序来对原来的stripe进行排序,并且将没有出现的元素滤去,这样需要申请m[N][N]的空间,题中的N给的比较大,很可能超时。

LCS的递归不像背包问题的那种,可以用一行来结局,要是用两行的话,就得不断的把之前的一行保存下来,这里N的时候,又是容易发生超时。

最长连续公共子序列(LCS)与最长递增公共子序列(LIS)的更多相关文章

  1. 每日一题-——最长公共子序列(LCS)与最长公共子串

    最长公共子序列(LCS) 思路: 代码: def LCS(string1,string2): len1 = len(string1) len2 = len(string2) res = [[0 for ...

  2. 最长回文子序列LCS,最长递增子序列LIS及相互联系

    最长公共子序列LCS Lintcode 77. 最长公共子序列 LCS问题是求两个字符串的最长公共子序列 \[ dp[i][j] = \left\{\begin{matrix} & max(d ...

  3. Codeforces 527C Glass Carving (最长连续0变形+线段树)

    Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glas ...

  4. CodeForces 527C. Glass Carving (SBT,线段树,set,最长连续0)

    原题地址:http://codeforces.com/problemset/problem/527/C Examples input H V V V output input H V V H V ou ...

  5. 51nod 1006 最长公共子序列Lcs(经典动态规划)

    传送门 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是 ...

  6. 1006 最长公共子序列Lcs

    1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdks ...

  7. 最长公共子序列LCS

    LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了.公共部分 必须是以相同的顺序出现,但是不必要是连续的. LCS具有最优子结构,且满足重叠子问题的 ...

  8. 编程算法 - 最长公共子序列(LCS) 代码(C)

    最长公共子序列(LCS) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定两个字符串s,t, 求出这两个字符串最长的公共子序列的长度. 字符 ...

  9. 【51NOD】1006 最长公共子序列Lcs(动态规划)

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...

随机推荐

  1. Gradle打包问题Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0

    前言 使用gradle打包react native的时候,出现了如下报错,下面和大家说一下解决的具体办法 Deprecated Gradle features were used in this bu ...

  2. 在navcat中清空数据后,设置id归零方法

    写后台完成后,需要清空Mysql数据库中的测试数据,但是后面新增的数据,一直是以原来所删除数据的最大id为增量基本,比如,对于一些id敏感的项,十分不便,如图 原有10条数据,清空后,新增一两条,手动 ...

  3. hadoop项目开发运行报错(log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).)

    使用hadoop+myeclipse开发项目是测试运行报错: log4j:WARN No appenders could be found for logger (org.apache.hadoop. ...

  4. webpack的一般性配置及说明

    1.webpack的常规配置 先给出一个示例: const path = require('path'); const HtmlWebpackPlugin = require('html-webpac ...

  5. 2019-5-28-VisualStudio-扩展开发

    title author date CreateTime categories VisualStudio 扩展开发 lindexi 2019-05-28 19:51:49 +0800 2018-2-1 ...

  6. EwoMail 邮件服务器安装

    ewomail 安装及使用 主页:http://www.ewomail.com/ 开源版主页:http://www.ewomail.com/list-9.html 开源版文档:http://doc.e ...

  7. rabbit例子

    https://blog.csdn.net/csm201314/article/details/76377214 #include <SimpleAmqpClient/SimpleAmqpCli ...

  8. 补比赛——牛客OI周赛9-普及组

    比赛地址 A 小Q想撸串 题目分析 普及T1水题惯例.字符串中找子串. Code #include<algorithm> #include<iostream> #include ...

  9. shelve模块 xml模块

    # import shelve# f=shelve.open('db.shl')# # f['stu1']={'name':'alex1','age':28}# # f['stu2']={'name' ...

  10. 【leetcode】1078. Occurrences After Bigram

    题目如下: Given words first and second, consider occurrences in some text of the form "first second ...