最長公共上公升子串行問題

2021-09-27 13:53:18 字數 770 閱讀 1866

最長上公升子串行和最長公共子串行的結合,這裡給出o(n2)做法

dp[i][j]表示以b[j]結尾的,a陣列中的前i個元素與b陣列中的前j個元素可以構成的最長公共子串行的長度

轉移方程:

分兩種情況討論:

1.a[i]不包含在子串行中(a[i] != b[j] 或者相等但是不選擇a[i])

dp[i][j] = dp[i-1][j]

2.a[i]包含在子串行中

dp[i][j] = max( dp[i-1][k] + 1 ) ---- (0<=k由於第2個問題中,b[k]2)啦

**:

#include

#include

#include

using namespace std;

const int n

=3005

;int a[n]

,b[n

],dp[n]

[n];

int main()

} int ans=0;

for(int i=

1;i<=n;i++

)for

(int j=

1;j<=n;j++

) ans=

max(ans,dp[i]

[j])

; cout<

return0;

}

最長公共上公升子串行

題目描述 給定兩個整數序列,求它們的最長上公升公共子串行。輸入描述 輸入兩組資料,每組資料代表乙個整數序列,其輸入格式為 第一行輸入長度m 1 m 500 第二行輸入該序列的m個整數ai 231 ai 231 輸出描述 輸出共兩行。第一行輸出兩個序列的最長上公升公共子串行的長度l 第二行輸出該子串行...

最長公共上公升子串行

首先,在 a i b j 的時候有 dp i j dp i 1 j 為什麼呢?因為 dp i j 是以b j 為結尾的 lcia 如果dp i j 0 那麼就說明 a 1 a i 中必然有乙個字元 a k 等於b j 如果dp i j 等於0 呢?那賦值與否都沒有什麼影響了 因為 a k a i 那...

最長公共(上公升)子串行

題目 common subsequence 題目描述 給定兩個字串a和b 或數字序列 求乙個字串,使得這個字串是所給兩個字串的最長公共部分 可以不連續 動態規劃的做法 時間複雜度,o n m include include include include using namespace std co...