【题解】 ARC146E Simple Speed

牛逼逼题。

首先发现序列的总长是非常大的,和矩阵快速幂之类的东西也没啥几把关系,肯定就不能从序列的角度进行 dp 了,于是从值域角度进行 dp 。

从小到大把每种数放进去。

自己想到了类似连续段 dp 的做法 , 但是不太会处理快速转移 , 想到了枚举新建的连续段的数量和合并的连续段的数量,也发现了两者的差是定值,但是完全没有想过不考虑合并这些操作,只是考虑插板的相对位置 。

\(f_{i}\) 表示两个端点都没有被钦定,有恰好 \(i\) 个连续段的方案数。

\(g_i\) 表示端点被钦定一个, 有恰好 \(i\) 个连续段的方案数。

\(h_i\) 表示端点都被钦定了, 有恰好 \(i\) 个连续段的方案数。

有转移

\(f' , g' , h'\) 表示新的 \(f , g,h\)

$f'_{A-i} = f_i \times \binom {A-1} j $

$g'_{A - i + 1} = f_i \times \binom {A-1} {j-1}\times 2 + g_i \times \binom{A-1}{j-1} $

$h'_{A_i+2} = f_i \times \binom {A-1} {j-2}+ g_i \times \binom{A-1}{j-2} + h_i \times \binom {A-1}{j-2} $

波特们都说这题神仙在状态数是 \(O(n)\) 的,转移很简单。

我反而觉得状态数 \(O(n)\) 挺显然的 , 转移才是妙点。

就拿 $ f \to f'$ 来举例子。

转移到的目标是 \(A - i\) 很好理解。

就是你得在每个原来的段两边都得有两个目前的数才行,这样你就有了 \(j\) 段 , 再把其它 \(n - 2j\) 个加进去就是 \(n - j\) 段 ,这时候合并两个段就是拿一个中间的走 ,由于要把目前的数全部放完,就得新建一个段,所以总段数仍然是 \(n - j\)

这个系数的来源是这样的。

考虑先放了 \(j + 1\) 数进每个段的右边以及最左边段的左边 , 现在还剩 \(A - j - 1\) 个数 , 要把这些数插到 \(j\) 段形成的 \(n + 1\) 个集合,所以方案数是 $\binom {A-1} j $ 。

Q:为什么插板的组合意义和连续段是一一对应的?

A:现在的假设下,所有段都被合并成了一段,在最左、最右插数,实际意义是在最这里新建,在其它位置插板第一次是将这里“断开”成两个连续段 , 即选择不合并,后面再插板即是新建。

其它式子的组合意义类似。

Q:为啥显然 dp 的状态是 \(O(n)\) 的。

A:

考虑归纳

\(S_i = A_i - S_{i-1}\)

对于每个时刻。

显然 \(f\) 的取值只有一种 \(S_i\)\(g\)\(f\) 转移过来的值只有\(S_i + 1\)

假设以及证明了之前的取值只有 \(S_i ,S_i + 1\)

那么这一步也只会产生 \(S_i , S_i + 1\)
最开始又只有 \(S_i + 1\)

\(h\) 的证明同理。

posted @ 2023-02-06 17:33  寂静的海底  阅读(45)  评论(0编辑  收藏  举报