給定兩個序列 x= 和 y=,找出x和y的最長公共子串行。
輸入資料有多組,每組有兩行 ,每行為乙個長度不超過500的字串(輸入全是大寫英文本母(a,z)),表示序列x和y。
每組輸出一行,表示所求得的最長公共子串行的長度,若不存在公共子串行,則輸出0。
input
abcbdab
bdcaba
output
4
首先要明白子串行的概念是什麼,就是乙個序列去掉0個或者多個元素後得到的結果,這裡需要強調的就是,子串行不一定是連續的,有可能是不連續的,像題目中的最長公共子串行就是at。想要用動態規劃來解題,首先要找到遞推關係式,然後根據地遞推關係式自底向上的進行程式設計
這個就是該問題的遞推關係式,其中c[i,j]表示長度為i和長度為j的兩個序列的最長公共子串行的長度,它依賴於比它還要小的子問題。
ac**:
#includeusing namespace std;
int main()
cout<
}}
最長公共子串行問題
給定整數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...