簡單DP 最長公共子串行 LCS

2021-10-09 07:26:19 字數 762 閱讀 5927

portkey

lcs板題

考慮維護f[i

][j]

f[i][j]

f[i][j

]表示第乙個數列第i位前和第二個數列第j位前的lcs

菜至極只會n

2n^2

n2考慮轉化

這是個排列,就可以搞事情

把乙個數列的數變成下標,相應的替換另乙個數列裡的數

這樣不會改變兩個數列lcs的本質

轉化後發現只需要求另乙個數列的lis(最長上公升子串行)了

lis當然用單調佇列優化

優秀✌️

#include

using

namespace std;

#define in read()

int in

const

int n =

1e5+5;

int n, a[n]

, b[n]

, q[n]

, len =1;

intmain()

int pos =

lower_bound

(q +

1, q + len +

1, b[i]

)- q;

q[pos]

=min

(q[pos]

, b[i]);

}printf

("%d\n"

, len)

;return0;

}

DP 最長公共子串行 LCS

題目 poj 1458 題目簡述 求兩個字串的最長公共子串行的長度。題目分析 這是一道經典的lcs問題,用dp來解決。include include include define mem x memset x 0,sizeof x define maxn 10 1000 using namespac...

dp 最長公共子串行 LCS

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行。兩個字串的...

dp 最長公共子串行(LCS)

字串行 與 字元字串的區別 序列是可以不連續的字串 字串必須要是連續的 問題描述 給定兩串字串 abcde 和 acdf 找出 2 串中相同的字串行,觀察知 相同的字串行為 acd 方法一 暴力解決 對於乙個長度為 n 的串 它的字串總共有 2 n 個,在用著 2 n 個字串與另乙個長度為 m 的串...