DP。还是LCS问题。
应该是有空格或者 Tab 。用scanf 就WA了。gets 就AC了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x7fffffff
#define eps 1...
分类:
其他好文 时间:
2014-11-04 13:13:12
阅读次数:
103
准确来说,动态规划是一种思想,而不是一种算法。算导里将它归结为——高级程序设计技巧。 在线性结构上进行状态转移DP,统称线性DP。 线性DP最常见的有: 子集和问题,LIS问题,LCS问题。 拓展之后有:子段和问题,杂类问题。1. 子集和问题和硬币计数问题子集和问题的一个实例: 〈S,t〉。其中,....
分类:
其他好文 时间:
2014-10-02 21:24:53
阅读次数:
264
以前一直不懂LCS问题,然而找工作被LCS折磨的,与那个公司无缘了。 最长公共子序列问题是一道经典的动态规划问题,最长公共子序列问题也有最优子结构。即:Xi即X序列的前i个字符(1属于LCS(X,Y);若:xm==yn(最后一个字符相同),则不难用反证法证明:该字符必是X与Y的任一最长公共子序...
分类:
其他好文 时间:
2014-09-23 11:33:34
阅读次数:
174
问题描述:序列X={x1,x2,…,xn},Y={y1,y2,…,yn},当Z={z1,z2…,zn}是X的严格递增下标顺序(可以不连续)的子集,也是Y的严格递增下标顺序(可以不连续)的子集,则Z是X和Y的公共子序列。例如X={A,B,C,B,D,A,B},Y={B,D,C,A,B,A},{B,C,A}、{B,C,B,A}、{B,D,A,B}都是X和Y的公共子序列。其中最长的公共子序列叫做Long...
分类:
其他好文 时间:
2014-09-10 15:53:20
阅读次数:
317
今年阿里的笔试题,就有一道是求连续的公共子串。
思路一:我当时第一反应是把其中较短的一个串的所有子串的都求出来,然后用这些子串(先用长度较长的)去长串里面做匹配。后来一想效率太低了。
思路二:效仿不连续的LCS问题,先把表填了,然后再在表里面找。
代码实现
/**
* 源码名称:LCString.java
* 日期:2014-09-02
* 程序功能:LCS(连续)
* ...
分类:
其他好文 时间:
2014-09-03 09:42:26
阅读次数:
197
思路:给定一个字符串,求两个不重叠的字串,他们翻转互补。其中一个字符串可以是删掉最多两个字符的原字符串子串。动态规划,由于可以对子串进行删除操作,我首先想到了LCS问题,但需要枚举所有的长度,这样复杂度为O(N^3),不可取。由于长度线性增加,考虑使用二分查找目的长度,这样复杂度为O(N^2*log...
分类:
其他好文 时间:
2014-08-15 19:27:09
阅读次数:
223
一、什么是最长公共子序列 什么是最长公共子序列呢?举个简单的例子吧,一个数列S,若分别是两个或多个已知序列的子序列,且是所有符合条件序列中最长的,则S称为已知序列的最长公共子序列。 举例如下,如:有两个随机数列,1 2 3 4 5 6 和 3 4 5 8 9,则它们的最长公共子序列便是:3 4 5....
分类:
其他好文 时间:
2014-08-09 18:15:58
阅读次数:
311
LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了。公共部分必须是以相同的顺序出现,但是不必要是连续的。LCS具有最优子结构,且满足重叠子问题的性质。所以我们可以用动态规划来解决LCS问题。由LCS问题的最优子结构可得出递归式:参考代码:#incl...
分类:
其他好文 时间:
2014-08-06 22:19:42
阅读次数:
204
这道题基本上是在普通LCS问题上的一点小小的变形,由求LCS的长度,改为求LCS的权值。架构还是不变的。可作为LCS问题的模板题。时间复杂度O(N^2)。
注意
题目中的字母都是小写字母,也就是只有26种字符。不需要开太大的数组。所以hash就是很好的一种保存权值的方法。另外吐槽一下。子弹序列和恐怖分子序列的长度太坑了,因为题目没有给出长度。我开了个2000个数组,wa了n次。改成2005就AC了。...
分类:
其他好文 时间:
2014-08-06 14:59:11
阅读次数:
162
最长公共子序列问题LCS问题描述参考解答动态规划算法可有效地解此问题。下面我们按照动态规划算法设计的各个步骤来设计一个解此问题的有效算法。1.最长公共子序列的结构解最长公共子序列问题时最容易想到的算法是穷举搜索法,即对X的每一个子序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公共子序列,并...
分类:
其他好文 时间:
2014-07-16 18:01:53
阅读次数:
280