最長遞增子列 最長公共子串行 python實現

2021-05-24 03:21:40 字數 601 閱讀 3979

dp演算法:

最長公共子串行:

把問題分成兩種情況來討論:

1. 如果s1[i] == s2[j]。就是i,j對應位置上的字元相等。那麼可以得出m[i,j] = m[i-1,j-1]+1;為什麼呢?可以想象的。如果m[i-1,j-1]也是乙個最後方案,在這個最優方案上我們同時增加乙個字元。而這兩個字元又相 等。那麼我們只需要在這個m[i-1,j-1]的最優方案上++就可以了。

2. 如果s1[i] != s2[j]。那麼就拿m[i-1,j]和m[i,j-1]來比較。m[i,j]的值就是m[i-1,j]和m[i,j-1]中大的值。這好比原來的字串 是s1[1...i-1]是abc,s2[1...j-1]是abe。那s1[1..i]是abce,s2[1..j]是abec。可以看出來這個時候m[i,j]不是由m[i-1,j-1]決定的,而是由abce和abe或者abc和abec來決定的,也就是m[i-1,j]和m[i,j-1]。

所以我們可以把這個問題的遞迴式寫成:

最長遞增子列可以轉化為lcs求解   dp+排序

python實現**:

最長公共子串行 最長遞增子串行 最長遞增公共子串行

求最長公共子串行 int dp maxn maxn int a maxn b maxn int main else dp i j max dp i 1 j dp i j 1 printf d n dp m n return 0 輸出最長公共子串行 int dp maxn maxn int d max...

最長公共子串行 最長遞增子串行

最長公共子串行 dp 杭電1159 include using namespace std string str1,str2 int dp 1005 1005 intlcs return dp str1.size str2.size int main 最長遞增子串行 杭電1257 include u...

最長遞增子串行 最長公共子串行 最長公共子串

最長遞增子串行a 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6.輸入描述 第一行包含乙個整數t,代表測試資料組數。對於每組測試資料 n 陣列的長度 a1 a2 an 需要計算的陣列 保證 1 n...