跳转至

简单子序列相关问题

1.求最长公共子序列:

\[ f_i= \max_{1≤j<i∧a_j<a_i} f_j+1 \]

朴素做法:\(O(n^2)\)

数据结构优化或二分优化:\(O(n\log n)\)

相关变形例题:

1.B3637 最长上升子序列

2.AT_chokudai_S001_h LIS

3.友好城市

4.[NOIP1999 提高组] 导弹拦截

5.[ABC165F] LIS on Tree

2.子序列计数:

求长度为K的上升子序列个数

\(f_{i,j}\)\(a_i\)为上升子序列末项,长度为\(j\)的上升子序列个数 $$ f_{i,j}=\sum_{k=1}^{i-1}f_{k,j-1}[a_k<a_i] $$ 朴素做法:\(O(n^2k)\)

数据结构(树状数组)优化:\(O(nk\log n)\)

(一个上升子序列的所有数的集合可以与另一个上升子序列的所有数的集合相同,如果同时存在于一个序列,都为合法上升子序列,都算入贡献)(可重复)

相关变形例题:

1.Subsequences

2.低价购买(LIS的计数)(不重复)

3.[TJOI2014] 上升子序列(不重复)

4.[ABC104D] We Love ABC

5.Number of Subsequences

6.The Battle of Chibi

3.拆序列问题:

将一个序列拆成两个具有单调性的子序列

相关变形例题:

1.子序列

2.[HNOI2009] 双递增序列

3.Two Merged Sequences

4.LCS:

相关变形例题:

1.LCS

2.【模板】最长公共子序列


\(by\) \(Rubbish\_Du\)