AGC045D
文章目录
题意:
给你一个长度为$N$的一个字符串$S$,初始时每个字符均为$0$。
然后给你两个数字$A,B$,你可以对这个字符串进行无限次的两个操作
- 选择连续$A$个字符将它们变成$0$
- 选择连续$B$个字符将它们变成$1$
求本质不同的字符串个数,对$10^9+7$取模。
$1\leq A, B\leq N\leq 5000$,所有数字均为整数。
sol:
显然,我们可以使每个位置为$1$,因此,若将$0$和$1$取反,答案并不会改变,所以为了方便我们假设$A\leq B$。
考虑怎么样的字符串$x$是合法的:
- 将所有连续的长度$\ge A$的$0$变为$1$,之后存在长度$\ge B$的$1$
因为假设已经固定了一段$1$,那么由于$A\leq B$,所以可以在末端继续填充$1$。
或者直接考虑倒着的操作序列可以看出。
考虑计算最后并不合法的字符串数量。可以通过$dp$计算连续$0$长度$<A$和连续$1$长度$< B$的序列。然后考虑如何$\ge A$的连续的$0$插入连续的$1$中。
考虑预处理出将$\ge A$的连续$0$插入到一个具有$j$个连续$1$部分的方式的数量。
令$g_{i,0/1}$表示长度为$i$的连续$1$段(包含长度$\ge A$的$0$段)并且以$0/1$结尾的方案数(但是开头为$1$)
令$f_{i,0/1}$表示长度为$i$的以$0/1$结尾的不合法方案数。
时间复杂度$O(n^2)$
|
|