【题解】[AGC035F] Two Histograms

提供一个与所见题解不同的思路。可能较为复杂,但本人感觉更为自然。最后的式子是一样的。

考虑如何判定一个给定的网格是否能通过操作得到。我们从下往上依次确定操作。观察网格的最后一行,能发现可能合法的网格具有如下性质:(这些性质和下文提到的性质都较为显然,因此不额外进行原因的说明)

  1. 所有 \(2\) 应在所有 \(0\) 的左边。
  2. 这一行的 \(+1\) 操作一定延伸到了最右的 \(2\) 的右侧,但在最左的 \(0\) 的左侧。这二者之间一定全是 \(1\)
  3. 一个 \(2\) 会迫使其所在的列的 \(+1\) 操作从网格最上面延伸至当前这一行。我们称这样的列“被限制”。同时,若一个 \(1\) 的左边有 \(0\),那么它也会迫使其所在列的 \(+1\) 操作有如上性质。

一个例子如图所示:


图中红色部分即代表“被限制”的列。这一行的 \(+1\) 操作至少应延伸到蓝色实线部分,至多延伸到蓝色虚线部分。可以发现,这二者之间的某个 \(1\) 若未被该行 \(+1\) 操作覆盖,则也会使其所在列“被限制”。因此我们强制让该 \(+1\) 操作延伸到虚线部分,就不会出现这种情况,是对其他尚未确定的操作限制最少的。

那么现在最后一行的操作已经确定了,而它对于其他操作的确定的影响,仅仅是这些“被限制”的列。

看向下一个行。如果给当前行确定操作时,已经有了一些“被限制”的列,是什么情况呢?上面的性质都会继续存在,但是会多出一条:在当前行内,已经“被限制”的列只能是 \(1\)\(2\),且这些 \(2\) 一定在这些 \(1\) 的前面。

接下来我们定义这一行的分段点:关注上述的 \(2\)\(1\) 中,最右的 \(2\) 和最左的 \(1\) 之间的部分。如果它们之间没有 \(0\),称这个“最左的 \(1\)”为分段点;否则,称这些 \(0\)最左的为分段点

(若最右的 \(2\) 不存在,视其在整行的左边;最左的 \(1\) 不存在视为在整行右边)

那么,处在分段点及其右侧的格子,只能是 \(0\)\(1\);其左的格子,只能是 \(1\)\(2\)。并且,如果右侧格子是 \(1\),会造成所在列“被限制”;左侧格子为 \(2\) 同理。

此时进行一个重要观察:在当前行,如果一个列确定了“被限制”的时间(之前、在当前行新增、尚未),又确定了在分段点的哪一侧(左、右),就可以唯一确定这一列应该是哪个数了。也即,当前行的数字,和当前行的分段点位置+每一列的“被限制”情况,构成一个双射。

于是可以尝试设计一个这样的dp:记 \(dp_{i,j}\) 表示在第 \(i\) 行之后填数的方案数,使其确定第 \(i\) 行之后的操作会让 \(j\) 个列“被限制”。

考虑刷表转移。枚举新增“被限制”列数 \(k\),并分类讨论。

  1. 分段点所在列是一个之前已经“被限制”的列。

\[dp_{i-1,j+k}\ \leftarrow_+\ dp_{i,j}\times j\times \binom{m-j}{k} \]

  1. 是一个未“被限制”的列。给它填上0。

\[dp_{i-1,j+k}\ \leftarrow_+\ dp_{i,j}\times (m-j)\times \binom{m-j-1}{k} \]

我们终于获得了一个多项式时间的算法。考虑上述dp过程的组合意义,就是在每一行选了一个分段点,又给每一列确定了在哪一行首次“被限制”,以此唯一对应一个合法填数方案。(想一想,为什么)但是有一个限制:如果第 \(j\) 列被第 \(i\) 行选为了分段点,则其不能恰好在第 \(i\) 行时首次“被限制”。

用生成函数描述,则一个行的生成函数为:

\[\sum_{i=0}(m-i+1)\dfrac{x^i}{i!}=(m+1-x)e^x \]

组合意义是说,枚举这一行造成的“首次被限制”的列数 \(i\),则这些列不能被这一行选为分段点,于是选分段点的方案数是 \(m+1-i\)。(\(+1\) 的原因是分段点可以在整行的右边,可以看分段点定义处)。而指数型生成函数就将列的标号分配给了行。

所以答案就是:

\[\left[\dfrac{x^m}{m!}\right][(m+1-x)e^x]^n\times e^x \]

最后卷一个 \(e^x\),是因为可能有的列最后也没有“被限制”,将它们放进 \(e^x\) 中。

化简得

\[m!\sum_{i=0}\binom n i(-1)^i(m+1)^{n-i}\dfrac{(n+1)^{m-i}}{(m-i)!} \]

可以 \(O(n)\) 计算。

posted @ 2022-06-09 21:09  秋叶冬雪  阅读(43)  评论(0编辑  收藏  举报