码迷,mamicode.com
首页 > 其他好文 > 详细

【CodeForces】G. Partitions 斯特林数

时间:2018-04-13 17:52:29      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:大小   16px   计算   style   def   ons   end   mat   blank   

【题目】G. Partitions

【题意】n个数$w_i$,每个非空子集S的价值是$W(S)=|S|\sum_{i\in S}w_i$,一种划分方案的价值是所有非空子集的价值和,求所有划分成k个非空子集的方案的价值和。1<=k<=n<=2*10^5,1<=wi<=10^9。

【算法】斯特林数

【题解】首先价值与具体数字没有关系,即:

$$ans=num*\sum_{i=1}^{n}w_i$$

其中num表示1在每个k划分方案中所在集合的大小的和。

考虑一种角度,所在集合的大小可以视为所在集合的每个数字贡献了1的价值,那么答案就是1和每个数字在同一个集合的方案数,即:

$$num=\begin{Bmatrix}n\\ k\end{Bmatrix}+(n-1)*\begin{Bmatrix}n-1\\ k\end{Bmatrix}$$

其中1自己的贡献是s(n,k),其余n-1个数字的贡献是将它和1视为整体的方案数s(n-1,k)。

斯特林数可以用通项公式O(k)计算,总复杂度O(n ln n)。

 

 

 

以上是正解,但一般人很容易yy出下面的等式:

$$num$$

【CodeForces】G. Partitions 斯特林数

标签:大小   16px   计算   style   def   ons   end   mat   blank   

原文地址:https://www.cnblogs.com/onioncyc/p/8821579.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!