題目:p1439 【模板】最長公共子串行 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)
關於lcs問題,可以通過離散化轉換為lis問題,於是就可以使用stl二分的方法o(nlogn)解決lcs問題!
先將a陣列與乙個遞增的數列1,2,3...n兩兩對應(t陣列),再把b陣列中每個數在a陣列中的位置表示成c陣列,
經過此番操作,a與b的公共子串行在c陣列中就是呈遞增狀態的。
**:
#include #include using namespace std;
typedef long long ll;
const int n = 1e5 + 10;
int a[n], b[n], c[n], r[n], t[n];
int main()
for (int i = 1; i <= n; ++i)
cin >> b[i];
for (int i = 1; i <= n; ++i)
int cnt = 0;
for (int i = 1; i <= n; ++i)//使用求解lis問題的stl二分方法
}cout << cnt << endl;
return 0;
}
洛谷P1439 最長公共子串行(LCS問題)
給出1 n的兩個排列p1和p2,求它們的最長公共子串行。輸入格式 第一行是乙個數n,接下來兩行,每行為n個數,為自然數1 n的乙個排列。輸出格式 乙個數,即最長公共子串行的長度 輸入樣例 1 複製5 3 2 1 4 5 1 2 3 4 5 輸出樣例 1 複製3 資料規模 對於50 的資料,n 100...
最長公共子串行(LCS)問題
問題描述 見演算法導論p208 p209 前提概念 給定乙個序列x x1,x2,xm 對i 0,1,m,記x的第i個字首為xi x1,x2,xi 故xm x,而x0是個空序列 乙個給定序列的子串行就是該序列去掉0個或多個元素 不一定連續 如bcdb是abcbdab的乙個子串行 基於以上定義,最長公共...
最長公共子串行問題LCS
乙個給定序列的子串行是指在原序列順序不變的基礎上刪去若干元素後得到的序列。給定兩個序列x和y,當乙個序列z既是x的子串行又是y的子串行時,稱z序列為x和y 的公共子串行。例如,x a,b,c,b,d,a,b y b,d,c,a,b,a 則序列 b,c,a 是x和y的乙個公共子串行,但不是x和y的最長...