2025省选模拟6
T1、 圣诞树
原 cf140E
先说 60 pts 做法:
首先考虑如何处理两层之间的转移。
每两层之间我们只需要用总方案数减去两层重合的方案数即可,对于两层重合的方案数,我们其实并不需要知道具体集合是什么,只需要知道集合的大小,然后乘上一个组合数即可,所以我们需要知道不考虑层与层之间的限制时每层用恰好 $ j $ 种颜色填满的方案数(不考虑有 $ m $ 个颜色,而是只有 $ j $ 个颜色,也就是少一个组合数 $ \binom{m}{j} $ ),设为 $ f_{ l_i ,j} $ ,同时设考虑了层与层之间的限制时每层恰好用 $ j $ 种颜色填满的方案数为 $ dp_{i,j} $ 。
所以我们可以得到转移式:
\[dp_{i,j} = \binom{m}{j} f_{ l_i ,j} \sum_{k} dp_{i-1,k} - dp_{i-1,j} f_{i,j} \]接下来考虑怎么求 $ f_{i,j} $ ,考虑容斥,我们可以轻松求出来 $ g_{i,j} $ 表示至多用 $ j $ 个颜色涂满 $ i $ 个彩球,那么有
\[g_{i,j} = j \times (j-1)^{i-1} \]然后我们可以发现有
\[g_{i,j} = \sum_{k=0}^{j} \binom{j}{k} f_{i,k} \]然后二项式反演可得
\[f_{i,j} = \sum_{k=0}^{j} (-1)^{k} \binom{j}{k} g_{i,j-k} \]以上是 $ O(len^3) $ 的, $ len $ 表示最大的 $ l_i $ ,瓶颈在求 $ f $ 数组,并且 $ dp $ 数组的转移中的组合数由于模数 $ p $ 不是质数,所以处理起来很麻烦,那我们换种思路。
对于 $ f $ 数组,我们不考虑颜色之间的大小关系,而是按照每种颜色第一次出现的前后顺序确定大小关系,最后乘上一个 $ j! $ ,为什么要这样做,这是我们再看 $ dp $ 转移式发现如果我们把那个组合数拆开的话就有
\[\begin{aligned} dp_{i,j} &= \frac{m!}{(m-j)! j! } \times j! \times f_{ l_i ,j} \sum_{k} dp_{i-1,k} - dp_{i-1,j} f_{i,j} \\ &= \frac{m!}{(m-j)! } f_{ l_i ,j} \sum_{k} dp_{i-1,k} - dp_{i-1,j} f_{i,j} \end{aligned} \]发现 $ j! $ 消去了,那么剩下的 $ \frac{m!}{(m-j)!} $ 可以直接预处理,接下来就是如何求 $ f $ 了。
其实我们可以直接 $ DP $ ,我们考虑线性转移,每遇到新的一个彩球要染色那么就考虑是新加入一个颜色还是用之前的颜色,对应着有
\[f_{i,j} = f_{i-1,j-1} + f_{i-1,j} \times (j-1) \]于是我们可以 $ O(\sum_{i} l_i + (\max_{i} l_i) ^2) $ 解决这道题。
T2、 过河
黑暗爆炸 - 4968
建议看原题解。
T3、 点对游戏
注意到贡献是由每对点来的,那么 $ i $ 可以获得一对点的贡献只需要让他们俩同时被 $ i $ 选择即可,那么假设 $ i $ 最后选了 $ y_i $ 个点,那么选择一对点的概率就是 $ \frac{y_i (y_i - 1)}{n(n-1)} $ ,所以最终答案就是
\[\frac{y_i (y_i - 1)}{n(n-1)} \sum_{i=1}^{n} \sum_{j=i}^{n} \sum_{k} [dis(i,j) = k] \]其中 $ k $ 是给出的那 $ m $ 个数,然后直接点分治即可。
标签:frac,省选,sum,times,2025,模拟,binom,考虑,dp From: https://www.cnblogs.com/GGrun-sum/p/18675692