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 的串...