$\newcommand{le}{\leqslant}\newcommand{ge}{\geqslant}$

[JOISC2020]遗迹

同步自LOJ讨论。这个做法是我对官方示例代码进行逆向分析的结果,与周雨扬等大佬的做法差异较大。

题目链接

题意

$2N$ 根柱子排成一行,依次编号为 $1, 2, \ldots, 2N$, 其中高度为 $1, 2, \ldots, N$ 的各 $2$ 根。进行 $N$ 轮操作,每次操作中,对于高度 $1, 2, \ldots, N$, 该高度的柱子中编号最大的高度不变,其余的降低 $1$. 当柱子高度降低到 $0$ 时柱子被摧毁。已知操作结束后,哪些柱子没有被摧毁,求原高度的方案数。

题解

将石柱缩短的过程等价转换

我们注意到,对于某一高度,最后会保留曾经为该高度的所有石柱中,编号最大的一根。

因此我们设初始高度为 $i$ 的石柱编号为 $X_i < Y_i$; 最后保留的高度为 $k$ 的石柱为 $T_k$. 则求出 $T_n, T_{n-1}, \ldots, T_1$ 的算法如下:

算法一 给定初始局面,求出最后保留的石柱及其高度

  1. 令集合 $S=\emptyset$.
  2. 对于 $i=n, n-1, \ldots, 1$, 执行如下操作:
    1. $S \gets S \cup \{X_i, Y_i\}$.
    2. $T_i = \max S$.
    3. $S \gets S \setminus \{T_i\}$.

关于卡特兰数的引理

我们先证明一个引理。

引理:设卡特兰数 $h_n=\frac{(2n)!}{n!(n+1)!}$, 则:

$$h_{n+1}=\sum_{2m \le n}{n \choose 2m}2^{n-2m}h_m$$

证明:设 $g_n$ 为所有长度为 $n$ 的由括号组成的序列的合法子括号序列数之和。

一方面,我们枚举是哪些位属于合法子括号序列,根据卡特兰数的意义容易得出,$g_n=\sum_{2m \le n}{n \choose 2m}2^{n-2m}h_m$.

另一方面,对于 $n \in \mathbb Z_+$, 考虑长度为 $n$ 的括号序列的最后一位是否含于括号序列内:若含,则这是一个右括号,考虑其对应的左括号,这对括号的严格内部有 $i$ 个字符,则它们构成一个 $i$ 个字符的括号序列的合法子括号序列;否则这可以是左括号也可以是右括号。

因此 $g_n$ 有递推式:

$$g_n=\begin{cases}1,&n=0;\\2G_{n-1}+\sum_{i=0}^{n-2}G_iG_{n-2-i}&n>0.\end{cases}$$

把它写成生成函数的形式,即 $G(x)=1+2xG(x)+x^2G^2(x)$, 解得

$$G(x)=\frac{1-2x - \sqrt{1-4x}}{2x^2}$$

其中规定 $\sqrt{1-4x}$ 的常数项为 $1$.

因此

$$xG(x)+1=\frac{1-\sqrt{1-4x}}{2x}$$

即 $xG(x)+1$ 为卡特兰数的生成函数。故 $g_n=h_{n+1}$.

引理证毕!

$T_1=n+1$ 的情况数

算法一中,当 $i=1$ 时,在步骤2.2中集合 $S=\{1, 2, \ldots, 2n\} \setminus \{T_2, T_3, \ldots, T_n\}$. 由于正整数集合 $S$ 的大小为 $n+1$, 所以 $T_1=\max S>n$, 进一步地我们得出 $T_1=n+1$ 可等价于 $T_2, T_3, \ldots, T_n \ge n+2$. 我们考虑集合 $S$ 与 $\{n+2, \ldots, 2n\}$ 的交集 $S'$. 我们需要保持除了 $i=1$ 时以外,在每个步骤2.2中,$S'$ 均非空。

我们发现,若 $X_i < n+2 \le Y_i$, 则 $|S'|$ 不变,我们记 $a_i=0$; 若 $Y_i < n+2$, 则 $|S'|$ 减少 $1$, 记 $a_i=-1$; 若 $X_i \ge n+2$, 则 $|S'|$ 增加 $1$, 记 $a_i=1$. 假设 $a_i=-1$ 的有 $m$ 个,则 $a_i=1$ 的也有 $m$ 个。

那么在步骤2.2中 $S'$ 非空就等价于 $\forall 2 \le i \le n, \sum_{j=i}^na_j \ge 0$. 在确定一种 $\{a_i\}_{i=2}^{n}$ 序列后,我们按照它的指导来分配 $X_i, Y_i$.

对于 $n+2$ 至 $2n$, 就是把原先代管在这一侧的石柱的初始高度任意分配,但是其中有 $m$ 对位置高度相同,于是这里的方案数是 $2^{-m}(n-1)!$.

对于 $1$ 至 $n+1$, 还要补上 $X_1, Y_1$, 于是这里的方案数是 $2^{-m-1}(n+1)!$.

综上可得,$T_1=n+1$ 的情况数为:

$$\sum_{2m \le n}(n+1)!(n-1)!{n-1 \choose 2m}2^{-2m-1}h_m=(n+1)!(n-1)!2^{-n}h_n=(n-1)!\frac{(2n)!}{n!2^n}=(n-1)!(2n-1)!!$$

事实上通过打表我们发现一个有趣的性质:$T_1$ 取 $n+1, n+2, \ldots, 2n$ 的机会是均等的。这也说明了可能有更优美的证明方法,还请组合计数大佬们赐教>_<

对残存石柱的最终高度序列DP

设第 $i$ 个残存石柱(也就是位置 $A_i$)的高度为 $p_i$, 换句话说说,$T_{p_i}=A_i$. 我们考虑 $p_1, p_2, \ldots, p_n$ 的前缀最小值的性质。

假设 $p_k=\min\{p_1, p_2, \ldots, p_k\}$. 当算法一的 $i=p_k$ 循环结束时,可得 $\max S < A_k$. 由于最终高度小于 $p_k$ 的所有残存石柱编号都大于 $A_k$, 所以此后 $S$ 将始终包含当前的 $S$, 也就是当前的 $S$ 所含石柱最终全部被摧毁。

注意到,初始高度不小于 $p_i$ 的石柱中,各有 $(n-p_i+1)$ 根石柱最终残存或被摧毁。于是设 $n-p_i+1=j$.

假设对于所有 $\min\{p_1, p_2, \ldots, p_i\}=n-j+1$ 的情况,考虑确定初始高度不小于 $n-j+1$, 但最终被摧毁的石柱的位置和初始高度,及前 $i$ 根残存石柱的初始原高度的方案数,记作 $f(i, j)$.

设 $\min\{p_1, p_2, \ldots, p_{i-1}\}=n-j+1$, 若 $i=1$ 则设 $j=0$.

如果 $p_i < n-j+1$ 是前缀最小值,设 $p_i=n-j-k+1$. 那么它会新带进来一些原高度介于区间 $[n-j-k+1, n-j+1)$ 的石柱。我们为最终被摧毁的石柱确定位置和高度,位置的方案数好算,这些位置从在 $A_i$ 左边且没有被占领的位置里任选,所以方案数是 $A_i-i-j \choose k$. 被摧毁的石柱的原高度不好考虑,我们考虑联合那些原高度介于区间 $[n-j-k+1, n-j+1)$ 的残存石柱一并计算,根据定义它们在 $A_i$ 右边。那么这就变成了,当原问题规模为 $k$ 时,求 $T_1=k+1$ 的方案数,它是 $(k-1)!(2k-1)!!$. 右边的残存石柱如何调换顺序都不会对 $T_1$ 造成影响,所以欲去掉它们的影响只需要除以 $(k-1)!$. 因此这种情况的转移式用主动转移可写为 $f(i, j+k) \overset+\gets f(i-1, j){A_i-i-j \choose k}(2k-1)!!$.

如果 $p_i \ge n-j+1$, 那么它的原高度已经在前头的DP中预留好了,只需要从 $j-i+1$ 种原高度里任选一种就好。因此这种情况的转移式是 $f(i, j) \overset+\gets (j-i+1)f(i-1, j)$.

综上,我们得到了一个小常数 $O(n^3)$ 时间的算法。

代码链接

posted @ 2020-04-20 09:33  nealchen  阅读(515)  评论(0编辑  收藏  举报