最長公共子串行問題(動態規劃)

2021-10-06 20:30:55 字數 774 閱讀 7724

問題描述:

輸入格式:

兩行,每行乙個字串,分別表示乙個dna序列(每個字串長度不超過1000)。

輸出格式:

乙個數,最長公共子串行元素的個數。

輸入樣例:

在這裡給出一組輸入。例如:

agct

att輸出樣例:

在這裡給出相應的輸出。例如:

2解析:首先要明白子串行的概念是什麼,就是乙個序列去掉0個或者多個元素後得到的結果,這裡需要強調的就是,子串行不一定是連續的,有可能是不連續的,像題目中的最長公共子串行就是at。想要用動態規劃來解題,首先要找到遞推關係式,然後根據地遞推關係式自底向上的進行程式設計

這個就是該問題的遞推關係式,其中c[i,j]表示長度為i和長度為j的兩個序列的最長公共子串行的長度,它依賴於比它還要小的子問題。

有了遞推關係式,就可以程式設計了

需要注意的地方已經注釋了

#include

using

namespace std;

#define max 1002

string a,b;

int dp[max]

[max]=;

intmain()

}}cout<

length()

][b.

length()

];return0;

}}

動態規劃 最長公共子串行問題

最長公共子串行問題 longest common subsequence problem 簡稱lcs問題。題目為給定兩個序列x y求它們的lcs 最長公共子串行 這裡的子串行z的定義為 z中的元素既在x中也在y中,並且他們在x y中滿足嚴格的下標為乙個增序列 假設下標從左到右依次增大 另外,不要求z...

最長公共子串行問題 動態規劃

給定兩個字串s1s2.sn和t1t2.tn。求出這兩個字串最長的公共子串行 輸入 abcicba abdkscab 輸出 abca 定義dp i j 為s1 si和t1 tj對應的lcs的長度 s1 si 1和t1 tj 1對應的公共子列有三種情況 當si 1 tj 1時,在s1 si和t1 tj的...

最長公共子串行問題(動態規劃)

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