演算法 LCS及輸出LCS

2021-10-13 13:00:48 字數 737 閱讀 8994

最長公共子串行

#include

using

namespace std;

typedef

long

long ll;

char a[

1005

], b[

1005];

//pos[i][j]的三個值1,2,3分別表示左、左上和上

//pos記錄當前lcs是從哪個點過來的,如果不等於2說明當前值是繼承自上乙個相等的點

//所以如果不等於2就沿著路徑往回走,一直走到(1,1)點,然後回溯輸出pos[i][j] == 2的點即可

//此方法只能輸出乙個lcs

int dp[

1005][

1005

], pos[

1005][

1005];

void

print

(int i,

int j)

intmain()

}}print

(la, lb)

;putchar(10

);return0;

}

有個很神奇的題目能轉化為lcs。

將給定字串變成回文串所需要插入的最少字元數。

因為回文串正著讀和反著讀是一樣的,所以求正著的和反著的字串的lcs就是當前最長的回文子串行,總長度減去這個的長度就是需要插入的字元,不在回文子串行裡的字元就在對稱位置插乙個就好了。

O nlogn LIS及LCS演算法

morestep學長出題,考驗我們,第二題裸題但是資料範圍令人無奈,考試失利之後,刻意去學習了下優化的演算法 一 o nlogn 的lis 最長上公升子串行 設當前已經求出的最長上公升子串行長度為len。先判斷a t 與d len 若a t d len 則將a t 接在d len 後將得到乙個更長的...

O nlogn LIS及LCS演算法

morestep學長出題,考驗我們,第二題裸題但是資料範圍令人無奈,考試失利之後,刻意去學習了下優化的演算法 一 o nlogn 的lis 最長上公升子串行 設當前已經求出的最長上公升子串行長度為len。先判斷a t 與d len 若a t d len 則將a t 接在d len 後將得到乙個更長的...

LCS 演算法的改進

通常兩個字串的最大公共子串的問題是通過下面的演算法來完成的 把字串1 長度m 橫排,串2 長度n 豎排,得到乙個m n的矩陣c,矩陣的每個元素的值如下,如果m i n j 則c j i 1,否則,c j i 0。然後找出矩陣中連續是1的對角線最長的乙個,則對角線的長度就是公共子串的長度.一看這個方法...