题解:P14230 不连续子串 / subseq
2024 NOIP 联考供题。
题意
给你一个长为 \(n\) 的序列 \(a_{1\dots n}\),你需要求出其所有本质不同非空子序列的本质不同非空子序列数量之和。
\(n\le 8000\)。
题解
本题做法很多,此处介绍一种比较巧妙的做法,空间为线性。
我们不妨对每一种可能的子序列对钦定一个出现位置进行统计。
设外层、内层子序列分别为 \(S=\{p_{1},p_2,\dots ,p_{l_1}\},T=\{q_{1},q_2,\dots ,q_{l_2}\}\)。
原先一层的情况下,我们可以要求 \(\forall j\in(p_{i-1},p_{i}),a_j\ne a_{p_i}\),即钦定一种子序列在最左的出现位置处统计到。
那么两层的情况下,我们考虑对内层进行 DP,设 \(f_i\) 表示考虑到 \(i\) 且钦定 \(i\) 在 \(T\) 内的答案,那么枚举 \(T\) 中上一个位置 \(j\),考虑 \((j,i)\) 中的数填入 \(S\) 的方案数,有如下限制:
- 对于 \(j<p<i,a_p=a_i\),要求 \(p\) 不能在 \(S\) 中。
- 令 \(l\) 为最大的 \(j<l<i\) 使得 \(a_l=a_i\),必须存在 \(l<q<i\) 使得 \(q\) 在 \(S\) 中。
- 对 \(S\) 中每相邻两个数 \(p,q\),要求 \(\forall k\in(p,q),a_k\ne a_q\)。
其中第一条限制是为了限制 \(T\) 为 \(S\) 中最左的,后两条限制是为了限制 \(S\) 为最左的。
时间复杂度 \(O(n^2)\),空间复杂度 \(O(n)\)。

浙公网安备 33010602011771号