题目描述:Find a longest common subsequence of two strings.输入:First and second line of each input casecontain two strings of lowercase character a…z. There...
分类:
其他好文 时间:
2015-01-13 19:37:52
阅读次数:
180
这题要用到最长公共子序列,又是DP,可是不会,于是就去学这个,看了一会儿,终于有点心得了。
主体思想就是先求出最长公共子序列,然后把公共字符之前的所有字符都合并起来。具体请看下面的注释。
#include
#include
const int N=105;
char s1[N],s2[N],s[N*2];
int lcs[N][N],index1[N],index2[N];//index和in...
分类:
其他好文 时间:
2015-01-09 00:20:26
阅读次数:
191
解题思路:题目给出的描述就是一种求最长上升子序列的方法 将该列数an与其按升序排好序后的an'求出最长公共子序列就是最长上升子序列但是这道题用这种方法是会超时的,用滚动数组优化也超时,下面是网上找的求LIS的算法假设要寻找最长上升子序列的序列是a[n],然后寻找到的递增子序列放入到数组b中。(1)当...
分类:
其他好文 时间:
2015-01-08 15:04:15
阅读次数:
166
/*
* copyleft@hustyangju
* 问题:longest common subsequece problem
* 思路:从底往上,利用动态规划,划分子问题,利用LCS子问题的长度变化,求得LCS
* 时间复杂度O(m*n)
* 空间复杂度O(m*n)
*/
#include
#include
using namespace std;
class lcs
{
p...
分类:
编程语言 时间:
2014-12-26 13:01:52
阅读次数:
468
1 #include 2 #include 3 4 using namespace std; 5 const int N = 1005; 6 #define max(a,b) a>b?a:b 7 8 char a[N] , b[N]; 9 int dp[N][N];10 11 int ma...
分类:
其他好文 时间:
2014-12-25 01:27:44
阅读次数:
246
在数据采集及大数据处理的时候,数据排重、相似度计算是很重要的一个环节,由此引入相似度计算算法。常用的方法有几种:最长公共子串(基于词条空间)、最长公共子序列(基于权值空间、词条空间)、最少编辑距离法(基于词条空间)、汉明距离(基于权值空间)、余弦值(基于权值空间)等,今天我们着重介绍最后两种方式。余...
分类:
编程语言 时间:
2014-12-25 01:23:26
阅读次数:
506
其实就是一个最长公共子序列的问题,不过要打印路径。对于路径打印,可以采取0-1背包问题的方法,第一可以利用一个二维数组记录每个状态的指向最后再由最后一个状态
回推,第二可以直接由最后一个状态结合前面的状态转移进行路径打印;下面的代码采用了第二种方法。
代码如下:
#include
#include
#include
using namespace std;
int main...
分类:
其他好文 时间:
2014-12-25 00:15:56
阅读次数:
121
题意:给出一个字符串s,问至少加入多少个字母让它变成回文串解题思路:求出该字符串与该字符串翻转后的最长公共子序列的长度,再用该字符串的长度减去最长公共子序列的长度即为所求反思:因为题目所给的n的范围为3#includechar s[5005],w[5005];int dp[2][5005];int ...
分类:
其他好文 时间:
2014-12-21 08:08:52
阅读次数:
185
解题思路:先注意到序列和串的区别,序列不需要连续,而串是需要连续的,先由样例abcfbc abfcab画一个表格分析,用dp[i][j]储存当比较到s1[i],s2[j]时最长公共子序列的长度 a b f c a b 0 0 0 0 0 0 0a 0 1 1 1 1 1 1b 0 1 2 2 2 2...
分类:
其他好文 时间:
2014-12-20 08:13:50
阅读次数:
187