CF1920E 题解

CF1920E

被这种题卡了,脸都不要了。

仔细读题,发现序列可以分成两部分($0$ 和 $1$)来考虑。

在合法序列中,对于一个 $1$,它产生的子串贡献一定是(假设与上一个 $1$ 之间有 $x$ 个 $0$,与下一个 $1$ 之间有 $y$ 个 $0$):

$$(x+1)(y+1)$$

如果去 DP 这 $n$ 个 $1$,易得转移方程:

$$f_{i,j}=\sum f_{i-p\times j,p}$$

$f_{i,j}$ 表示:当前贡献了 $i$ 个合法子串,上一个 $1$ 到现在的 $1$ 的长度为 $j$ 的组成序列方案数。

接下来考虑 $p$ 的值域。

要使式子成立,有:$p\in [1, \frac{i}{j}]$。

考虑题目限制(最长合法串长度不大于 $k$),有:$p\in [1,k+1-j]$。

所以 $p\in [1,\min{\frac{i}{j},k+1-j}]$,即:

$$f_{i,j}=\sum\limits_{p=1}^{\min\{\frac{i}{j},k+1-j\}} f_{i-p\times j,p}$$

code

Licensed under CC BY-NC-SA 4.0