動態規劃 最長公共子串行

2021-10-22 16:51:19 字數 752 閱讀 9139

最長公共子串行

輸入兩個串s1,s2;

設maxlen(i,j)表示

s1的左邊的i個字元形成的子串,與s2的左邊的j個字元形成的子串的最長

公共子串行(i,j從0開始算);

maxlen(i,j)就本題的"狀態"

假定 len1 = strlen(s1),len2 = strlen(s2)

那麼題目的要求就是maxlen(len1,len2)

並且顯然當i或者j等於0的時候

maxlen(n,0) = 0 (n = 0....len1);

maxlen(0,n) = 0 (n = 0...len2);

遞推公式:

if(s1[i-1] == s2[j-1])//s1的最左邊的字元是s1[0];

maxlen(i,j) = maxlen(i-1,j-1)+1;

else

maxlen = max(maxlen(i,j-1),maxlen(i-1,j));

//**如下:

char sz1[1000];

char sz2[1000];

int maxlen[1000][1000];

int main()

for(int j=0;j<=length2;j++)

for(int i=1;i<=length1;i++)

else}}

cout<}

return 0;

}

動態規劃 最長公共子串行

問題描述 我們稱序列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 longest common length 的 每個字元可以不連續,如x y 那麼它們的最長公共子串行為。這是乙個經典的動態規劃問題,著手點還是找到 最精髓的 狀態轉移方程 假設x,y兩個序列的前i,j個位置的最大子串行已經找到為r i j 自底往上 那麼x i 與y...

動態規劃 最長公共子串行

看完演算法導論關於這部分內容之後的總結 關於最長公共子串行問題 給定兩個子串行 x y 求x和y長度最長的公共子串行。解決方法 首先先要了解lcs的最優子結構,令x y 為兩個子串行,z 為x和y的任意lcs。1 如果 xm yn 則 zk xm yn 且 zk 1 是 xm 1 和 yn 1 的乙...