最長公共上公升子串行(LCIS問題)

2022-05-09 19:46:35 字數 902 閱讀 1128

給定乙個長度為 \(n\) 的序列 \(a\),乙個長度為 \(m\) 的序列 \(b\),求他們的最長的公共上公升子串行的長度。

考慮狀態設定為最長公共子串行和最長上公升子串行的狀態"合併"在一起的狀態。

設 \(f[i][j]\) 為 \(a\) 前 \(i\) 個和 \(b\) 前 \(j\) 個匹配的最長公共上公升子串行以 \(b[j]\) 結尾的長度。(其實這裡設定成 \(a[i]\) 結尾也可以,只不過為了後面好轉移設的是 \(b[j]\))

轉移方程就很好推了:

\[f[i][j]=\max\beginf[i-1][j]\ \ (a[i]\neq b[j])\\ \max\(n^3)\) 的,考慮優化:

首先因為 \(a[i]==b[j]\),所以裡面那個 \(\max\) 可以寫成這個形式

\[\max\(n^2)\) 更新。

具體地:如果列舉到的 \(b[j],則為後面的 \(j\) 更新 \(\max\(n)\)。

#include#includeinline int max(int x, int y) 

inline int read()

while(ch >= '0' && ch <= '9')

return w ? ~r + 1 : r;

}const int n = 3010;

int n, m, ans;

int a[n], b[n], f[2][n];

signed main()

} for(int i = 1; i <= m; ++i)

ans = max(ans, f[n&1][i]);

printf("%d\n", ans);

return 0;

}

後兩道題還需要再記錄路徑,這部分的思考留給讀者。

LCIS 最長公共上公升子串行

1004 tyvj1071 lcis最長公共上公升子串行 description 熊大媽的奶牛在小沐沐的薰陶下開始研究資訊題目。小沐沐先讓奶牛研究了最長上公升子串行,再讓他們研究了最長公共子串行,現在又讓他們要研究最長公共上公升子串行了。小沐沐說,對於兩個串a,b,如果它們都包含一段位置不一定連續的...

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

ac通道 題目含義就是求最長公共上公升子串行 首先考慮,最長公共上公升子串行 最長上公升子串行 最長公共子串行,可以通過lis和lcs的思想去考慮本題目。定義狀態 dp i j 表示a陣列的前i個和b陣列的前j個且以b j 結尾的lcis長度考慮狀態轉移 轉移有兩種情況 a i b j 時候的轉移,...

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

題解熊大媽的奶牛在小沐沐的薰陶下開始研究資訊題目。小沐沐先讓奶牛研究了最長上公升子串行,再讓他們研究了最長公共子串行,現在又讓他們研究最長公共上公升子串行了。小沐沐說,對於兩個數列a和b,如果它們都包含一段位置不一定連續的數,且數值是嚴格遞增的,那麼稱這一段數是兩個數列的公共上公升子串行,而所有的公...