Description
对于一个\(n\)个元素集合的所有子集,我们要从这些子集中取出至少一个,使得取出的集合的交的大小恰好为\(k\)。求方案数,答案对\(10^9+7\)取模。
\(1\leq n\leq 10^6, 0\leq k\leq n\)。
Solution
恰好\(k\)个元素并不好求,但是至少\(k\)个元素是可做的。答案显然是\(\binom{n}{k}(2^{2^{n - k}} - 1)\)(注意这个东西的话如果交集大小为\(s > k\)的话一个集合集的贡献会算\(\binom{s}{k}\)次,也就是先规定交集再考虑方案数,下面还要用这个性质)。
假设恰好\(k\)个的方案数为\(a_k\),上述至少\(k\)个的方案数为\(b_k\)。那么有: \[ b_k = \sum_{i = k}^n \binom{i}{k}a_i \] 这就是广义容斥原理的标准形式……反推一下可以得到: \[ a_k = \sum_{i = k}^n (-1)^{i - k}\binom{i}{k}b_i \] 然后就做完力,,,
Code
1 |
|