最長公共子串行(dp

2021-10-10 08:23:54 字數 896 閱讀 5309

題目描述

給你乙個序列x和另乙個序列z,當z中的所有元素都在x中存在,並且在x中的下標順序是嚴格遞增的,那麼就把z叫做x的子串行。

例如:z=是序列x=的乙個子串行,z中的元素在x中的下標序列為<1,2,4,6>。

現給你兩個序列x和y,請問它們的最長公共子串行的長度是多少?

輸入輸入包含多組測試資料。每組輸入佔一行,為兩個字串,由若干個空格分隔。每個字串的長度不超過100。

輸出對於每組輸入,輸出兩個字串的最長公共子串行的長度。

樣例輸入

abcfbc abfcab

programming contest

abcd mnp

樣例輸出42

0dp[i][j]= dp[i-1][j-1]+1 , a[i]=b[j] ; or ; max(dp[i-1][j],dp[i][j-1] ) , a[i]!=b[j]

#include

using

namespace std;

char a[

1010

],b[

1010];

int mlen[

1010][

1010];

intmain()

if(i==

0||j==0)

//dp

if(a[i]

==b[j]

) mlen[i]

[j]=mlen[i-1]

[j-1]+

1;else mlen[i]

[j]=

max(mlen[i-1]

[j],mlen[i]

[j-1])

;}cout<[lenb-1]

<}return0;

}

DP 最長公共子串行

解題報告 題目 演算法 dp 最長公共子串行 思路 最長公共子串行,英文縮寫為lcs longest common subsequence 其定義是,乙個數列 s 如果分別是兩個或多個已知數列的子串行,且是所有符合此條件序列中最長的,則 s 稱為已知序列的最長公共子串行。d i j 表示s1的第i位...

最長公共子串行 DP

有序子串行定義 若x 則它的子串行為y 即原序列調出若干項組成的序列且下標要求有序。lcs 最長公共子串行 定義 給定兩個序列x 和y 存在乙個嚴格遞增的x的下標序列為,對所有的j 1,2,3.k,滿足xi yj,例如x 1 4 3 2 5 y 4 3 5 7 則x和y的最長公共子串行為 4 3 5...

最長公共子串行 DP

最長公共子串行 lcs.pas c cpp 問題描述 乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列。確切地說,若給定序列x x1,x2,xm 則另一串行z z1,z2,zk 是x的子串行是指存在乙個嚴格遞增的下標序列 i1,i2,ik 使得對於所有j 1,2,k有 xij zj 例如,序...