最長公共子串行LCS 基礎動態規劃問題 C

2021-08-17 20:09:50 字數 796 閱讀 9117

輸入 

第一行給出乙個整數n(0

< n

< 100)表示待測資料組數

接下來每組資料兩行,分別為待測的兩組字串。每個字串長度不大於1000.

輸出 每組測試資料輸出乙個整數,表示最長公共子串行長度。每組結果佔一行。

樣例輸入 

2 asdf

adfsd

123abc

abc123abc

樣例輸出

3 6

經典的動態規劃問題,需要先找出狀態轉移方程:

第一,如果str1[m]=str2[n]的情況下,最長公共子串行長度應該就是m-1、n-1長度的字串組的最長公共子串行長度加上1。用公式表示就是lcs[m][n]=lcs[m-1][n-1]+1。

第二,如果str1[m]!=str2[n]的情況下,最長公共子串行長度應該在m-1、n 以及 m、n-1 這兩個子問題之中最大公子序列長度的大者。用公式表示就是lcs[m][n]= max ( lcs[m-1][n] , lcs[m][n-1] )。

#include 

#include

using

namespace

std;

int lcs(string a,string b)

else

} return memo[n][m];

}int main(int argc, char *argv)

最長公共子串行LCS(動態規劃)

1.描述 給定兩個序列 x y 求x和y的乙個最長公共子串行。2.分析 設最長子序列 z 則 1 若 xm yn 則 zk xm yn,且z k 1 是 x m 1 和 y n 1 的最長公共子串行 2 若 xm yn 且 zk xm 則 z 是 x m 1 和 y 的最長公共子串行 3 若 xm ...

最長公共子串行(LCS) 動態規劃

首先,動態規劃的關鍵是將之前所計算的結果儲存起來,之後直接呼叫!1.問題描述 字串的子串行 是指從該字串中去掉任意多個字元後剩下的字元在不改變順序的情況下組成的新字串。最長公共子串行 是指多個字串可具有的長度最大的公共的子串行。比如 adbcbd bdcaba這兩個字串的最長公共子串行是dcb 2....

動態規劃 最長公共子串行(LCS)

最長公共子串行也是動態規劃中的乙個經典問題。有兩個字串 s1 和 s2,求乙個最長公共子串,即求字串 s3,它同時為 s1 和 s2 的子串,且要求它的長度最長,並確定這個長度。這個問題被我們稱為最長公共子串行問題。與求最長遞增子串行一樣,我們首先將原問題分割成一些子問題,我們用 dp i j 表示...