最長公共子串行 lcs

2022-05-14 01:18:51 字數 1053 閱讀 7143

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 6

1 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問題。當數列的量為一定的時,都可以採用動態規劃去解決。解法動態規劃的乙個計算最長公共子串...