最長上公升子串行和最長公共子串行的結合,這裡給出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...