djl為了避免成為乙隻鹹魚,來找johann學習怎麼求最長公共子串行。
經過長時間的摸索和練習,djl終於學會了怎麼求lcs。johann感覺djl孺子可教,就給他布置了乙個課後作業:
給定兩個長度分別為n和m的序列,序列中的每個元素都是正整數。保證每個序列中的各個元素互不相同。求這兩個序列的最長公共子串行的長度。
djl最討厭重複勞動,所以不想做那些做過的題。於是他找你來幫他做作業。
輸入格式:
第一行兩個整數n和m,表示兩個數列的長度。
第二行一行n個整數a_1,a_2,…,a_n,保證1≤a_i≤〖10〗^9。
第三行一行m個整數b_1,b_2,…,b_m,保證1≤b_i≤〖10〗^9。
輸出格式:
一行乙個整數,表示兩個數列的最長公共子串行的長度。
輸入樣例#1:
6 61 3 5 7 9 8
3 4 5 6 7 8
輸出樣例#1:
4
對於40%的資料,n, m≤3000
對於100%的資料,n, m≤300000
#include #include#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
mapf;
int a[300009
];int
n,m;
int c[400009],d[260000
],aa,bb;
intlcs()
d[l]=c[i];//可悲的弄錯了變數
if(l>t)
t++;
}returnt;}
intmain()
int ans=lcs();
cout
}
LCS 最長公共子串行
問題描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在嚴格上 公升的序列 i1,i2,ik 使得對 j 1,2,k,有 xij zj。比如z a,b,f,c 是 x a,b,c,f,b,c 的子串行。現在給出兩個序列 x和 y,你的任務是找到 x和 y的最大公共子...
LCS最長公共子串行
求兩個字串的最大公共子串行問題 子串行的定義 若給定序列x 則另一串行z 是x的子串行是指存在乙個嚴格遞增下標序列使得對於所有j 1,2,k有 zj xij。例如,序列z 是序列x 的子序列,相應的遞增下標序列為。分析 用動態規劃做 1.最長公共子串行的結構 事實上,最長公共子串行問題具有最優子結構...
LCS最長公共子串行
lcs是longest common subsequence的縮寫,即最長公共子串行。乙個序列,如果是兩個或多個已知序列的子串行,且是所有子串行中最長的,則為最長公共子串行。複雜度對於一般的lcs問題,都屬於np問題。當數列的量為一定的時,都可以採用動態規劃去解決。解法動態規劃的乙個計算最長公共子串...