動態規劃 最長子序列問題

2021-10-04 16:45:44 字數 909 閱讀 1136

最長公共子串行:x和y的公共子串行中長度最長的(包含元素最多的)叫做x和y的最長公共子串行。

思路:設x=x1x2…xm和y=y1y2…yn是兩個序列,z=z1z2…zk是這兩個序列的乙個最長公共子串行。

1.      如果xm=yn,那麼zk=xm=yn,且zk-1是xm-1,yn-1的乙個最長公共子串行;

2. 如果xm≠yn,那麼zk≠xm,意味著z是xm-1,y的乙個最長公共子串行;

3. 如果xm≠yn,那麼zk≠yn,意味著z是x,yn-1的乙個最長公共子串行。

從上面三種情況可以看出,兩個序列的lcs包含兩個序列的字首的lcs。因此,lcs問題具有最優子結構特徵。

#include

using namespace std;

int x[

100]

,y[100];

intmm

(int

**f,

int m,

int n)

//m是x序列的長度,n是y序列的長度

for(

int i=

0;i<=n;i++)if

(m>

0&&n>0)

else}}

}}return f[m]

[n];

}int

main()

for(

int i=

1;i<=n;i++

)int f[m+1]

[n+1];

int*p[m+1]

;for

(int i=

0;i<=m;i++

) cout<<

mm(p,m,n)

;return0;

}

動態規劃 最長子序列

引出 問題描述 給出乙個序列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 時間...

動態規劃最長子序列

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行。兩個字串的...