CodeForces 932E. Team Work
題目簡述:從$n \leq 10^9$個人中選取一個非空子集$X$,求所有可能的子集大小的$k \leq 5000$次方$|X|^k$之和。
解:code
令$[n] = \{1, 2, 3, \dots, n \}$。因為$|\emptyset| = 0$,不影響結果。故即求
$$
\sum_{X \subseteq [n]} |X|^k
= \sum_{x=0}^n x^k \sum_{X \subseteq [n]} [|X|=x] = \sum_{x=0}^n \binom{n}{x} x^k.
$$
利用斯特林數的性質,我們有
$$ x^n = \sum_{k=0}^n k! \begin{Bmatrix} n \\ k \end{Bmatrix} \binom{x}{k}. $$
帶入所求式得
$$
\begin{aligned}
\sum_{x=0}^n \binom{n}{x} i^k
& = \sum_{x=0}^n \binom{n}{x} \sum_{i=0}^k i! \begin{Bmatrix} k \\ i \end{Bmatrix} \binom{x}{i} \\
& = \sum_{i=0}^k \begin{Bmatrix} k \\ i \end{Bmatrix} \sum_{x=i}^n \frac {n!} {(n-x)! (x-i)!} \\
& = \sum_{i=0}^{\min\{k, n\}} \frac {n!} {(n-i)!} \begin{Bmatrix} k \\ i \end{Bmatrix} \sum_{x=i}^n \binom{n-i}{n-x} \\
\end{aligned}
$$
在計算出第二類斯特林數之後,代入計算即可。時間復雜度為$O(k^2 \log n)$。
CodeForces 932E. Team Work