3動態規劃求公共最長子序列

2021-07-11 17:59:26 字數 842 閱讀 3621

這是一道求公共最長子序列的題,首先要區別子串行與字串。子串行是可以不連續的,而字串一定是連續的。

思路:動態規劃  二維圖

例子:

輸入兩個字串s1,s2,cin就可以解決,之後進行動態規劃。如圖建立dp二維陣列來記錄。當比較到字元相同時,dp[i][j]這個位置的數是取dp[i-1][j]  dp[i][j]  dp[i][j-1]當中的最大值。而dp[i][j]的數由dp[i-1][j-1]得到。注意對角線對角線就是字串。

1 首先解釋dp[i][j] = dp[i-1][j-1] + 1  如圖a = a,b=b時ab = ab最長就是2 對角線正好對應著兩個字串相同位置上的字元

2 dp[i-1][j]是當s1為abfc時,s2為abc時來相互比較,此時子串行為3

3dp[i][j-1]是當s1為abf時,s2為abcf時來相互比較,此時子串行為3

**:#include

#include

#include

using namespace std;

int f(int a,int b,int c)

int dp[1001][1001];

string s1,s2;

int main()

{int l1,l2;

while(cin>>s1>>s2)

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

l1 = s1.length();

l2 = s2.length();

for(int i=0;i

求公共最長子序列

最長公共子串行的問題常用於解決字串的相似度,是乙個非常實用的演算法,作為碼農,此演算法是我們的必備基本功。二 概念 舉個例子,cnblogs 這個字串中子序列有多少個呢?很顯然有2 7個,比如其中的cb,cgs等等都是其子序列,我們可以看出 子串行不見得一定是連續的,連續的那是子串。在你找出的公共子...

動態規劃 最長子序列

引出 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7 an,求它的乙個子串行 設為s1,s2,sn 使得這個子串行滿足這樣的性質,s1分析 這題目是經典的dp題目,也可叫作最長上公升子串行或者 最長不下降子串行。有兩種演算法,複雜度分別為o n logn 和o n 2 演算法1 時間...

動態規劃 最長子序列

引出 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7 an,求它的乙個子串行 設為s1,s2,sn 使得這個子串行滿足這樣的性質,s1分析 這題目是經典的dp題目,也可叫作最長上公升子串行或者 最長不下降子串行。有兩種演算法,複雜度分別為o n logn 和o n 2 演算法1 時間...