今天在看代码源文件求diff的原理的时候看到了LCS算法。这个算法应该不陌生,动规的经典算法。具体算法做啥了我就不说了,不知道的可以直接看《算法导论》动态规划那一章。既然看到了就想回忆下,当想到算法正确性的时候,发现这个算法的正确性证明并不好做。于是想了一段时间,里面有几个细节很trick,容易陷进...
分类:
编程语言 时间:
2014-11-05 18:49:36
阅读次数:
230
POJ 1080 Human Gene Functions(求两字符串相似度:LCS变形)
http://poj.org/problem?id=1080
题意:
给你两个由字符A,C,G,T构造的字符串s1和s2, 现在你可以在这两个字符串中插入空格, 使得两串长相等(但是不能使得s1的空格对应s2的空格位置). 然后给你s1的特定字符对应s2中特定字符所能获得的分数矩阵:
问你最后两个字符串所能获得的最大分数是多少?
分析:
本题很类似于求字符串最短编辑距离或者求...
分类:
其他好文 时间:
2014-11-04 17:35:43
阅读次数:
187
HDU 1503 Advanced Fruits(LCS变形且输出解)
http://acm.hdu.edu.cn/showproblem.php?pid=1503
题意:
给你两个字符串s1和s2, 要你输出它们的并串s. 其中s1是s的一个子序列且s2也是s的一个子序列且s是所有符合前面要求的最短字符串.
分析:
令dp[i][j]==x表示s1串的前i个字符和s2串的前j个字符组成的串的LCS长度为x.
我们先求出LCS的dp数组值. 然后按照POJ2250:...
分类:
其他好文 时间:
2014-11-04 17:24:31
阅读次数:
198
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,题意晦涩难懂。LCS问题。
源序列要经过转换。 比如 4 2 1 3. 是指 事件1 发生在第四,事件2 发生在第二,事件3发生在第一 ,事件4发生在 第三。
转换后的序列为 : 3 2 4 1 。
所以说很丧病。UVA很多题都是一大堆题意。
我用的二维数组。其实可以优化 滚动或者一维。
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2014-11-04 13:12:24
阅读次数:
127
POJ 1159 Palindrome(字符串变回文:LCS)
http://poj.org/problem?id=1159
题意:
给你一个字符串, 问你做少需要在该字符串中插入几个字符能是的它变成一个回文串.
分析:
首先把原字符串和它的逆串进行匹配, 找出最长公共子序列. 那么最长公共子序列的字符串肯定是一个回文串. 所以原串剩下的部分是不构成回文的. 我们只需要添加剩下部分的字符到对应位置, 原串自然就变成了一个回文.
所以本题的解为: n 减去 (原串与逆...
分类:
其他好文 时间:
2014-11-04 13:12:12
阅读次数:
116
POJ 2250 Compromise(最长公共子序列LCS)
http://poj.org/problem?id=2250
题意:
给你两段由空格分隔的语句, 要你求该两段语句的最长公共子序列. 且随便输出一个解即可. 注意每个单词需要看成我们一般处理字符串子序列的一个单独字符. 即每个单词是一个整体.
分析:
与往常计算最长公共子序列一样的方式即可. 然后用DFS输出序列即可.本题与POJ1458提供的解法本质一样.
http://blog.csdn.net/u0134806...
分类:
其他好文 时间:
2014-11-03 17:46:19
阅读次数:
219
POJ 1458 Common Subsequence(最长公共子序列LCS)
http://poj.org/problem?id=1458
题意:
给你两个字符串, 要你求出两个字符串的最长公共子序列长度.
分析:
本题不用输出子序列,很简单,直接处理即可.
首先令dp[i][j]==x表示A串的前i个字符和B串的前j个字符的最长公共子序列长度为x.
初始化: dp全为0.
状态转移:
If A[i]==B[j] then...
分类:
其他好文 时间:
2014-11-03 16:27:00
阅读次数:
354
最长公共子序列描述咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。 tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此...
分类:
其他好文 时间:
2014-11-02 18:09:18
阅读次数:
172
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=465&page=show_problem&problem=2399最长的很简单,将串翻转过来后求两个串的lcs就是答案。。主要是字典序那里。。...
分类:
其他好文 时间:
2014-11-02 17:51:53
阅读次数:
260