dp最長公共子串LCS

2022-05-17 17:24:03 字數 1105 閱讀 9153

這題可用遞迴解出

(1)遞迴方法求最長公共子串行的長度

1)設有字串a[0...n],b[0...m],下面就是遞推公式。

當陣列a和b對應位置字元相同時,則直接求解下乙個位置;當不同時取兩種情況中的較大數值。

會超時

#include

char a[100000],b[100000

];int

lena,lenb;

int lcs(int i,int

j)int

main()

return0;

}view code

但是這樣子的方法會超時

接下來就是動態規劃

(2)動態規劃求最長公共子串行的長度

動態規劃採用二維陣列來標識中間計算結果,避免重複的計算來提高效率。

1)最長公共子串行的長度的動態規劃方程

設有字串a[0...n],b[0...m],下面就是遞推公式。字串a對應的是二維陣列num的行,字串b對應的是二維陣列num的列。

還寫出了乙個錯誤的**。。。

#include#include

int ans[1000][1000

];int max(int a,intb)

intmain()

printf(

"%d\n

",ans[i][j]);

}return0;

}

view code

最長公共子串行(LCS)與最長公共子串 DP

1 最長公共子串行 lcs 與最長公共子串 dp 子串應該比較好理解,至於什麼是子串行,這裡給出乙個例子 有兩個母串 比如序列bo,bg,lg在母串cnblogs與belong中都出現過並且出現順序與母串保持一致,我們將其稱為公共子串行。最長公共子串行 longest common subseque...

最長公共子串LCS

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...

最長公共子串(LCS)

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...