11.12 下午 T2 题解
考场上觉得人均 AB,然后上午砸了,就很慌。现在还是觉得上午很砸,仍很慌。
T3 暴力可过??
题意:给定 \(n\) 个格子,初始全为白色,一个人按顺序染黑一些格子,当一个格子左右的格子都被染黑后它立刻变黑,至全黑为止。求不同操作序列的个数。\(n \leq 400\)。
它看着很 dp,但是一个格子左右的状态都会影响它啊,怎么 dp 呢?
立刻变黑这个是不是没用啊,它变黑了也不会去影响其它格子啊。
那变黑的格子是一段段,段与段间恰一个空格。那就没有后效性了,可以 dp 了!
段之内染色的方案数应当是一定的,合起来时相对顺序不会乱,那这就是 P5689 多叉堆!
如果沿用 P5689 的方法,转移答案时还需要记录当前数字的个数。这个记一下分了几段就行了。
最后只剩段内染色的问题了。
明显每次新染的格子是原来一段格子的左边或右边,或者说所有时间只存在一个连通块。从 \(1\) 个格子拓展到 \(n\) 个格子,每次往左右端点拓展一下,总方案数是 \(2^{n-1}\)。
综上,转移方程为:
\[dp_{i,j} \gets 2^{i-k-1} \cdot dp_{k,j-1} \cdot \binom{i-j}{i-k-1},k \in [0,i-2]
\]
其中 \(dp_{i,j}\) 是前 \(i\) 数分 \(j\) 段的答案,\(k\) 是上一个选的数。这样做要把 \(dp_{0,0}\) 预设置为 \(1\)。
复杂度 \(O(n^3)\),够了。
考了 8h 回家,实在没心情再写一遍代码了。
本文来自博客园,作者:purplevine,转载请注明原文链接:https://www.cnblogs.com/purplevine/p/16884518.html