最近工作中需要写一个算法,而写完这个算法我却发现了一个很有意思的事情。需要的这个算法是这样的:对于A,B两个字符串,找出最多K个公共子串,使得这K个子串长度和最大。一开始想了一些乱七八糟的想法。 错误想法1:比如每次找最长公共子串,找到一个子串后,从A,B两个字符串中删除这个子串,之后在剩下的串中再 ...
分类:
其他好文 时间:
2016-09-11 18:52:17
阅读次数:
148
$dp$,最长公共子序列变形。 $f[i][j][h][0]$表示:$s[1 \cdots i]$与$t[1 \cdots j]$,分成了$k$段,并且$s[i]$与$t[j]$之后没有切的最优解。 $f[i][j][h][1]$表示:$s[1 \cdots i]$与$t[1 \cdots j]$, ...
分类:
其他好文 时间:
2016-09-09 22:17:32
阅读次数:
199
题目链接:反恐训练营 题意:本质上是求最大公共子序列,然后加上一个权值 分析:见代码 //公共子序列问题 //dp[i][j]表示前s1的前i个与s的前j个匹配得到的最大公共子序列 #include<cstdio> #include<cstring> #include<algorithm> usin ...
分类:
其他好文 时间:
2016-09-02 00:29:59
阅读次数:
143
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。 例如:输入两个字符串 BDCABA 和 ABCBDAB,字符串 ...
分类:
其他好文 时间:
2016-09-01 16:12:27
阅读次数:
168
LCS问题,又称最长公共子序列问题,是DP中较简单的一种,今天我们就来简单讲解一下。 设s1:AEGLEGLLELGEL 设s2:LREGELGEGLEG 求两个字符串的最大公共子序列长度 输出:8 dp[i][j]表示匹配到s1的前i个与s2的前j个所得到的最大公共子序列长度。 转移方程: dp[ ...
分类:
编程语言 时间:
2016-09-01 09:25:34
阅读次数:
216
思路:回文串的特点是,逆序输出和正序输出是一样的。所以这道题可以从这方面来考虑。如果将此字符串逆序输出,那么两个字符串的最长公共子序列将是最长的回文字符串,那么剩余的值将是要删除的字符个数。 求LCS的方法可以在csdn中找到。 ...
分类:
其他好文 时间:
2016-08-29 20:43:21
阅读次数:
407
题目链接 http://acm.hust.edu.cn/vjudge/problem/19201 解题思路 LCS 代码 ...
分类:
其他好文 时间:
2016-08-28 16:19:35
阅读次数:
139
Given two strings, find the longest common subsequence (LCS). 最长公共子序列 Your code should return the length of LCS. Given two strings, find the longest c ...
分类:
其他好文 时间:
2016-08-23 22:02:59
阅读次数:
192
感觉就是最长公共子序列的一个变形(虽然我也没做过LCS啦= =)。 转移方程见代码吧。这里有一个要说的地方,如果a[i] == a[j]的时候,为什么不需要像不等于的时候那样减去一个dp[i-1][j-1]呢?其实是要减去的,然后我们注意+1是什么呢?这两个位置是相同的,那么这一对组合是1,然后包含 ...
分类:
其他好文 时间:
2016-08-23 18:57:51
阅读次数:
93