poj1458(最長公共子串行問題)

2021-07-03 08:40:29 字數 455 閱讀 2843

問題描述:給a,b兩個字串,讓你找出最長公共子串行的長度的問題

解題思路:dp

狀態變數:d[i][j]表示以ai和bj為結尾的字串的最長公共子串行的長度

狀態方程:  當a[i]等於b[j]時d[i][j]=d[i-1][j-1]+1

不等時 d[i][j]=max(d[i-1][j],d[i][j-1])

邊界比較麻煩,你要把d[0][0],d[1][0],d[1][0],d[1][1],通過if判斷下,但在我的**中,可以不用這樣,仔細體會下

#include

#include

#include

#include

#include

using namespace std;

int main()

//想想為什麼是i-1,j-1

else //

//      cout<

poj 1458 最長公共子串行

common subsequence 題意 一行給出兩個字串s1和s2,找出他們的最長 公共子串行數量,乙個金典的動態規劃問題。用dp i j 表示字串s1取前i個,字串s2取前j個時,他們的最長公共子串行數量有多少。當s2右端又加入了乙個字元時,即表示為dp i j 1 時,如果s1 i 和s2 ...

POJ1458最長公共子串行

為了完成poj中的一題 spell checker 要寫乙個最長公共子串行的程式,居然突然全給忘了,楞是沒有寫出來,深深的鄙視自己一下。這也是一道動態規劃的典型題。遞迴實現如下 poj提交會超時,但是確實可以實現 using namespace std define max a b a b a b ...

POJ 1458 最長公共子串行

這個題的意思就是說 給乙個序列 a 和 b 讓你求他們的共同的子串行的長度,這些子串行可以不在原來的字串中連續排列。這個題的話,我們可以使用動態規劃的思路,我們假設 maxlen i j 是 a 串和 b 串中從一開始的,a 串中的的第 i 個字元和b 串中的第 j 個字元的最長公共子串行的長度。我...