[BZOJ2839] 集合计数
思路
直接计算不好计算, 套路的, 考虑「至少」「至多」来转化
容易发现你「钦定」\(k\) 个元素在交集之中, 也就是说交集大小「至少」为 \(k\) , 怎么处理这个的方案数, 其实比较容易可以发现, 这个的方案数为 (需要注意的是, 每一个集合都是可选可不选的)
\[f(k) = {n \choose k} \left(2^{2^{n - k}} - 1\right)
\]
带进套路里, 令 \(g(k)\) 表示「恰好」选择了 \(k\) 个元素在交集之中
你容易发现
\[f(k) = \sum_{i = k}^{n} {n \choose i} g(i)
\iff
g(k) = \sum_{i = k}^{n} (-1)^{i - k} {n \choose i} f(i)
\]
套进去算即可
一些细节与感想 :
首先, 求 \(f\) 的柿子时, 那 \(2^{n - k}\) 个集合不是表示去除 \(k\) 个元素的子集个数, 而是表示包含 \(k\) 个元素的集合个数, 这个对柿子的推导方式有很大的影响
其次关于 \(f \iff g\) 的理解, 其实这可以拆成
\[g(k) = \binom{n}{k} \sum_{i=0}^{n} (-1)^{i}\binom{n}{i}\left(2^{2^{n-k}} - 1\right)
\]
即为容斥
总结
常见套路, 板子题
注意很多问题要带一个组合数表示选择哪些
「钦定」意义下, 通过「至少」和「恰好」的转化来简化问题的计算