演算法 動態規劃 最長公共子串行,最長上公升子串行

2021-10-22 08:07:56 字數 951 閱讀 1533

最長公共子串行

//動態規劃-最長公共子串行

//時間複雜度:o(n*n)

#include

#include

#include

#include

using

namespace std;

const

int n=

1010

;int dp[n]

[n];

char s[n]

,t[n]

;int

main()

printf

("%d\n"

,dp[

strlen

(s+1)]

[strlen

(t+1)]

);}return0;

}

最長上公升子串行

//動態規劃-最長上公升子串行

//時間複雜度:o(n*n)

//d(i)就是找以a[i]結尾的,在a[i]之前的最長上公升子串行+1,當a[i]之前沒有比a[i]更小的數時,d(i)=1。所有的d(i)裡面最大的那個就是最長上公升子串行。

//其實說的通俗點,就是每次都向前找比它小的數和比它大的數的位置,將第乙個比它大的替換掉,這樣操作雖然lis序列的具體數字可能會變,但是很明顯lis長度還是不變的

#include

#include

using

namespace std;

const

int n=

1010

,inf=

0x3f3f3f3f

;int n;

int a[n]

,dp[n]

;//定義dp[i]為以ai為末尾的最長上公升子串行的和。

intmain()

return0;

}

動態規劃 最長公共子串行

問題描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在嚴格上公升的序列 i1,i2,ik 使得對j 1,2,k,有xij zj。比如z a,b,f,c 是x a,b,c,f,b,c 的子串行。現在給出兩個序列x和y,你的任務是找到x和y的最大公共子串行,也就是說要...

動態規劃 最長公共子串行

兩個序列的最長公共子序 lcs longest common length 的 每個字元可以不連續,如x y 那麼它們的最長公共子串行為。這是乙個經典的動態規劃問題,著手點還是找到 最精髓的 狀態轉移方程 假設x,y兩個序列的前i,j個位置的最大子串行已經找到為r i j 自底往上 那麼x i 與y...

動態規劃 最長公共子串行

看完演算法導論關於這部分內容之後的總結 關於最長公共子串行問題 給定兩個子串行 x y 求x和y長度最長的公共子串行。解決方法 首先先要了解lcs的最優子結構,令x y 為兩個子串行,z 為x和y的任意lcs。1 如果 xm yn 則 zk xm yn 且 zk 1 是 xm 1 和 yn 1 的乙...