DP最大公共子串行

2021-08-03 18:04:26 字數 774 閱讀 4013

題意:求兩個串的最長公共子串行

**中的dp[i][j]表示0到i-1跟0到j-1的最長公共子串行

空間變化圖如下:

分析如下:

**1.**dp[i][j]=dp[i-1][j-1]+1;(a[i]==b[j])

(因為加和都是要和他前一項的基礎上加和所以是dp[i-1][j-1])

**2.**dp[i][j]=max(dp[i-1][j],dp[i][j-1])(a[i]!=b[j]);

(保留當前狀態方便下一字母比較)

**3.**n由於dp(i,j)只和dp(i-1,j-1), dp(i-1,j)和f(i,j-1)有關, 而在計算dp(i,j)時, 只要選擇乙個合適的順序, 就可以保證這三項都已經計算出來了, 這樣就可以計算出dp(i,j). 這樣一直推到dp(len(a),len(b))就得到所要求的解了.

**如下:

#include 

#include

#include

using

namespace

std;

const

int maxn=5005;

int dp[maxn][maxn];

string a,b;

int main()

} cout

0;}

最大公共子串行

對於兩個字串,請設計乙個高效演算法,求他們的最長公共子串行的長度,這裡的最長公共子串行定義為有兩個序列u1,u2,u3.un和v1,v2,v3.vn,其中ui給定兩個字串a和b,同時給定兩個串的長度n和m,請返回最長公共子串行的長度。保證兩串長度均小於等於300。測試樣例 1a2c3d4b56 10...

最大公共子串行,最大公共子串,最大回文子串

1 兩個字串中最長公共子串行 該問題是動態規劃的經典問題,找出的公共序列不一定是連續的,參考資料很多,這裡就貼出公式和 做個簡單的筆記。設序列a,b的長度分別為n和m,l i,j 為a i b j 的最長公共子串行長度,有遞推公式 時間複雜度為o mn 如下 define n 50 intlcs c...

最大公共子串 DP

最大公共子串長度問題就是 求兩個串的所有子串中能夠匹配上的最大長度是多少。比如 abcdkkk 和 baabcdadabc 可以找到的最長的公共子串是 abcd 所以最大公共子串長度為4。下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。請分析該解法的思路,並補全劃線部分缺...