最長公共子串行長度以及列印(動態規劃入門)

2021-08-21 20:48:20 字數 1152 閱讀 4889

poj1458原題鏈結

北大郭煒老師在mooc上講的 演算法基礎的例題

**也是按照講的寫的

方法呢就是

串 a 以 i 為結尾和串 b 以 j 為結尾的最長公共子串行長度  maxlen[i][j]=max(maxlen[i][j-1],maxlen[i-1][j])

當a的第i-1字元個和b的第j-1個字元一樣時   maxlen[i][j] = maxlen[i-1][j-1] + 1;

核心**就是雙重for迴圈裡面的狀態轉移

if(str1[i-1]==str2[j-1])

maxlen[i][j]=maxlen[i-1][j-1]+1;

else

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

ac**

#include#include#include#include#define maxn 1001

using namespace std;

char str1[maxn],str2[maxn];

int maxlen[maxn][maxn];

int main()

}cout《另外 如果讓你列印最長公共子串行

需要要乙個回溯去尋找並且列印

比如題目 51nod1006鏈結51nod1006

ac**

#include#include#include#includeusing namespace std;

const int maxn=1e3+7;

char str1[maxn],str2[maxn];

int maxlen[maxn][maxn];

int main()

}int i=l1,j=l2,w=0;;

char q[maxn];

while(maxlen[i][j]);

}for(int i=w-1;i>=0;i--)

printf("%c",q[i]);

return 0;

}

求最長公共子串行長度

1.求最長公共子串行 子串行可以不連續 這是一道動態規劃題,設二維陣列dp i j dp i j 表示a串前i個字元 包括第i個 與b串前j個字元 包括第j個 所有的公共子串行的最長長度。例如,a串abbcd,b串abcd,dp 3 3 就表示的a的前三個字元與b的前三個字元的最長公共子串行長度,值...

SDUT 最長公共子串行長度 動態規劃

time limit 1000 ms memory limit 65536 kib submit statistic problem description 給定兩個序列x input 輸入資料有多組,每組有兩行 每行為乙個長度不超過500的字串 輸入全是大寫英文本母 a,z 表示序列x和y。out...

動態規劃求最長公共子串行長度和子串行

求兩個字串的最長公共子串行時,需要用到兩個陣列c maxlen maxlen b maxlen maxlen c maxlen maxlen 用於記錄兩個字串的lcs 最長公共子串行 的長度,b maxlen maxlen 記錄回溯時搜尋方向,1表示上方,1表示左方,0表示左上方。動態轉移方程 b ...