最長公共子串行問題

2021-09-25 22:58:38 字數 775 閱讀 6666

確定遞推關係式

if(s[i] == t[j]) dp[i+1][j+1] = dp[i][j]+1;

如果s[i] == t[j],以s[i],t[j]結尾的最長公共子串行等於dp[i][j]+1;

else dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);

如果不等,有兩種可能,一種是以s[i],t[j-1]結尾對應的長度較長,或者是以s[i-1],t[j]結尾對應的子串行最長

#include#include#include#include#include#include#include#include#define max 110

#define inf 10000000

using namespace std;

//測試函式

int main()

int n, m;

char s[max];

char t[max];

int dp[max][max];

cin >> n >> m;

for(int i=0; i> s[i];

for(int j=0; j> t[j];

memset(dp, 0, sizeof(dp));

//窮竭搜尋

for(int i=0; ifor(int j=0; jcout << dp[n][m] << endl;

cin.close();//開啟檔案以後要關閉

return 0;

}

最長公共子串行問題

給定整數a1,a2,an 可能有負值 求連續子串行和的最大值。為方便起見,如果所有整數都為負值,則最大子串行和為0 這是個顯而易見的方法,幾乎每個人在第一眼看到該問題都能夠想出來的方法。就是將所有的子串行找出來,然後求和最大的乙個。如果序列足夠大,該方法的效率可想而知。如下 include incl...

最長公共子串行問題

最長公共子串行問題很早就在很多論壇上見過,前幾天看到乙個人發了一篇帖子,心血來潮就去看演算法導論上的動態規劃部分,關於這個問題不再細述,直接貼c 實現的具體 了。做大公共子串行問題 pragma once include using std string define over 1 書中使用箭頭符號...

最長公共子串行問題

問題描述 字串行的子串行是指從給定字串行中隨意地 不一定連續 去掉若干個字元 可能乙個也不去掉 後所形成的字串行。令給定的字串行x x0,x1,xm 1 序列y y0,y1,yk 1 是x的子串行,存在x的乙個嚴格遞增下標序列,使得對所有的j 0,1,k 1,有xij yj。例如,x abcbdab...