最長公共上公升子串行

2022-09-20 11:48:13 字數 506 閱讀 6101

我的想法:

f[i][j]表示以i結尾的a與j結尾的b的最長公共子串行 狀態轉移方程

\[f[i][j]=max\+1

\]時間複雜度:\(o(n^4)\)

我們要分析最長上公升子串行,就必須分析最後一位,因此狀態裡要包含最後一位. 但是注意到這道題的特殊條件

a[i]和b[j]在成立的時候始終是相等的,而且是公共子串行,這樣就會造成狀態的浪費.因為記錄下來最後一位就會設計到列舉的過程,時間複雜度增加,並且沒有辦法用狀態集合優化

用乙個變數儲存合法決策集合 也就是滿足轉移條件的狀態集合

每次嘗試邊界條件的那乙個值就可以

for(int i=1;i<=n;i++)

for(int i=2;i<=n;i++)

{ int val=b[1]值得注意的技巧:

提出條件 屬於減掉常數

能夠使用判斷邊界來優化決策集合的條件是: 條件在改變的時候只改變邊界 條件相對固定

動態規劃複雜度過高 還有可能是狀態設計不夠優美

最長公共上公升子串行

題目描述 給定兩個整數序列,求它們的最長上公升公共子串行。輸入描述 輸入兩組資料,每組資料代表乙個整數序列,其輸入格式為 第一行輸入長度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...