Loading

【题解】CF961G Partitions

翻译不要乱炫技,请说人话。

题意

人话:

给定 \(n\) 个物品,第 \(i\) 个价值为 \(w_i\).

定义集合 \(S\) 的权值 \(W(S) = |S| \sum\limits_{p \in S} w_p\).

定义一种划分方案的权值为划分出的集合的权值之和。

试求出对于给定的常数 \(k\),所有将 \(n\) 个物品划分成 \(k\) 个集合的方案的总权值和。

思路

斯特林数 + 大力推导。

代数推导天地灭,组合意义保平安。

首先意识到不能真的划分集合,考虑每个元素在所有方案下对答案的贡献。

考虑枚举元素,钦定当前元素的集合大小,剩余的元素可以任意划分。于是得到当前元素的贡献系数:\(\sum\limits_{i = 1}^n i {n - 1 \choose i - 1} {n - i \brace k - 1}\),也就是说每个元素对答案的贡献其实是等价的。

于是可以写出答案:\(\sum\limits_{i = 1}^n w_i \sum\limits_{j = 1}^{n} j {n - 1 \choose j - 1} {n - j \brace k - 1}\).

考虑到维护 \({n - 1 \choose j - 1}\)\({n - j \brace k - 1}\) 反转后的卷积会 TLE,所以需要大力化简逃离卷积。于是得到一个很复杂的代数做法:

考虑到贡献系数中含有组合数,可以上二项式反演处理。

根据 \(m^n = \sum\limits_{i = 0}^m {m \choose i} {n \brace i} i!\),二项式反演得 \({n \brace m} = \frac{1}{m!} \sum\limits_{i = 0}^m {m \choose i} (-1)^{m - i} i^n\).

所以贡献系数可以表示成 \(\sum\limits_{i = 1}^n i {n - 1 \choose i - 1} \frac{1}{(k - 1)!} \sum\limits_{j = 0}^{k - 1} {k - 1 \choose j} (-1)^{k - 1 - j} j^{n - i}\).

拆开组合数再化简得:\(\sum\limits_{i = 1}^n i {n - 1 \choose i - 1} \sum\limits_{j = 0}^{k - 1} \frac{(-1)^{k - 1 - j} j^{n - i}}{j! (k - 1 - j)!}\).

交换求和顺序得:\(\sum\limits_{j = 0}^{k - 1} \frac{(-1)^{k - 1 - j}}{j! (k - 1 - j)!} \sum\limits_{i = 1}^n i {n - 1 \choose i - 1} j^{n - i}\).

然后考虑转化 \(\sum\limits_{i = 1}^n i {n - 1 \choose i - 1} j^{n - i}\).

考虑到组合数的下标是 \(i - 1\),可以配凑出 \(i - 1\),然后令组合数吸收掉。

\(i\) 拆成 \(1 + (i - 1)\)\(\sum\limits_{i = 1}^n {n - 1 \choose i - 1} j^{n - i} + \sum\limits_{i = 1}^n (i - 1) {n - 1 \choose i - 1} j^{n - i}\).

组合数吸收掉 \(i - 1\) 得:\(\sum\limits_{i = 1}^n {n - 1 \choose i - 1} j^{n - i} + (n - 1) \sum\limits_{i = 1}^n {n - 2 \choose i - 2} j^{n - i}\).

将下标重新化成 \(i\)\(\sum\limits_{i = 1}^{n - 1} {n - 1 \choose i} j^{n - i - 1} + (n - 1) \sum\limits_{i = 1}^{n - 2} {n - 2 \choose i} j^{n - i - 2}\).

整理一下:\(\sum\limits_{i = 1}^{n - 1} {n - 1 \choose i} j^{(n - 1) - i} + (n - 1) \sum\limits_{i = 1}^{n - 2} {n - 2 \choose i} j^{(n - 2) - i}\).

发现是二项式定理的形式,整理成 \((j + 1)^{n - 1} + (n - 1) (j + 1)^{n - 2}\).

然后乱做就可以 \(O(n \log n)\) 了。


这种做法太愚蠢了,考虑组合意义。

考虑 \(|S| \sum\limits_{p \in S} w_p\) 的组合意义:在集合内任选一歌数对,数对第一个数的权值对答案产生贡献。

分讨一下:

  • 自己和自己配对,方案数有 \({n \brace k}\) 种。

  • 和其他数配对,可以考虑先对剩余元素分好集合,再随意放入其中的一个集合,方案数是 \((n - 1) {n - 1 \brace k}\)

于是贡献系数是 \({n \brace k} + (n - 1) {n - 1 \brace k}\),直接算斯特林数就行。

代码懒得写了,就不放了。

posted @ 2023-02-07 22:15  kymru  阅读(15)  评论(0编辑  收藏  举报