随笔分类 -  最长公共子序列

最长公共子序列
HDU1503Advanced Fruits
摘要:1 /*给出两串,求一个最小的字符串包含这两个子串,子串在这个字符串中的顺序不变, 2 做法:定义两个数组,分别标记公共部分在第一个串和第二个串中的位置,在输出是判断一下,输出一个串两个公共部分之间的部分,不包含 3 公共部分,在输出第二个串公共部分之间的串,和最后一个公共部分,然后剩下的在公共部分后面的直接输出就可以了,注意这道题不能直接求出 4 最长公共,然后在最短的那个串中删除这个最长公共,剩下的加入第二个串,这样会导致顺序不对*/ 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 const in. 阅读全文

posted @ 2013-08-18 01:49 ok_boy 阅读(540) 评论(0) 推荐(0)

CF335B
摘要:1 /*CF335B 2 这个题目的n达到50000,但是串只是有小写字母组成,所以如果字符串的长度大于2600,那么 3 肯定存在,所开始输入就判断如果长度大于2600,那么直接找当个字母输出100个 4 否则执行LCS模块,然后判断所得最长公共是否大于100,如果小于100,那么直接输出最长公共 5 否则从两头分别取50个输出*/ 6 #include 7 #include 8 int dp[2600][2600],dir[2600][2600]; 9 char a[50005],b[2605],c[2605];10 void LCS(int n,int m)11 {12 in... 阅读全文

posted @ 2013-08-04 21:56 ok_boy 阅读(3391) 评论(0) 推荐(0)

滚动数组处理数据很大的公共子序列问题
摘要:1 #include 2 #include 3 char a[5010],b[5010]; 4 short int dp[2][5010]; 5 int LCS(int n,int m) 6 { 7 memset(dp, 0, sizeof(dp)); 8 int i,j; 9 for(i=1;i=dp[i%2][j-1])18 {19 dp[i%2][j]=dp[(i-1)%2][j];20 //printf("%d %d %d\n",i%2,j,dp[i%2][j]);21 ... 阅读全文

posted @ 2013-08-04 01:12 ok_boy 阅读(149) 评论(0) 推荐(0)

最长公共子序列算法解析
摘要:/*转自网上总结*/一、最长公共子序列(Longest Common Subsequence:LCS)设有两个序列A[1...m]和B[1...n],分别对A和B进行划分子序列A[1] A[1..2] A[1..3] ... A[1..m]B[1] B[1..2] B[1..3] ... B[1..n]依次求出A中的每个子序列(从A[1]开始)与B中每个子序列的最长公共子序列,并记录在数组C[m][n]中,C[i][j]表示A[1..i]和B[1..j]的最长公共子序列的长度。递推公式如下:①C[i][j]=0 i=0 or j=0②C[i][j]=C[i-1][j-1]+1 i!=0 and 阅读全文

posted @ 2013-07-29 18:14 ok_boy 阅读(1195) 评论(0) 推荐(0)

poj1159
摘要:1 /*/所要插入的个数是n-输入的序列和他逆序列的最长公共子串长度**/ 2 3 #include 4 #include 5 char a[5010],b[5010]; 6 short int dp[5010][5010];//用int会爆内存 7 int LCS(int n,int m) 8 { 9 int i,j;10 for(i=1;i=dp[i][j-1])19 {20 dp[i][j]=dp[i-1][j];21 // dir[i][j]=0;22 }2... 阅读全文

posted @ 2013-07-29 18:12 ok_boy 阅读(222) 评论(0) 推荐(0)

poj1458
摘要:1 /* 最长公共子序列*/ 2 #include 3 #include 4 #include 5 using namespace std; 6 int dp[1000][1000],dir[1000][1000]; 7 char a[1000],b[1000]; 8 int LCS(int n,int m) 9 {10 int i,j;11 for(i=1;i=dp[i][j-1])20 {21 dp[i][j]=dp[i-1][j];22 dir[i][j]=0;23 ... 阅读全文

posted @ 2013-07-29 18:11 ok_boy 阅读(217) 评论(0) 推荐(0)

poj2250
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 char a[1010][35],b[1010][35]; 8 int dir[1000][1000],dp[1000][1000]; 9 int LCS(int n,int m)10 {11 int i,j;12 for(i=1;i=dp[i][j-1])21 {22 dp[i][j]=dp[i-1][j];23 dir[i][j... 阅读全文

posted @ 2013-07-29 18:10 ok_boy 阅读(188) 评论(0) 推荐(0)

导航