最長公共子串行: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 的子串行。兩個字串的...