【题解】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}\),直接算斯特林数就行。
代码懒得写了,就不放了。