思路历程
1.列个思路:
我们要得到什么?
看看样例说明:
【样例说明】
假设原集合为{A,B,C}
则满足条件的方案为:{AB,ABC},{AC,ABC},{BC,ABC},{AB},{AC},{BC}
我们看到,样例说明将每一个方案列成了一个“集合里套集合”的形式。
我们也这样子搞。
我们叫类似“{AB,ABC}”的集合大集合,类似“AB”这样的集合叫小集合。
可以看到大集合里的小集合之间的交集至少两个。
(一下所有“小集合之间”都代指“同一大集合的小集合之间”)
2.推个式子
我们考虑选出若干集合
使得小集合之间的交集至少为k
我们强制选了k个数作为小集合之间的交集。
方案数:\(C_n^k\)
剩下的数构成小集合数:\(2^{n-k}\)
现在我们再把这些子集看成一个一个的数,我们再让他们组合成为“大集合”,有几种方案数?
没错:\(2^{2^{n-k}}\)种!
但是,我们肯定不能取空集,毕竟人家是一个一个的小集合,你不能一个小集合也不选:
\(2^{2^{n-k}}-1\)
根据乘法原理得到,小集合之间交集元素至少为K个的方案数是:
\(C_n^K\) X \((2^{2^{n-k}}-1)\)
3.举个例子:
对于集合{1,2,3}我们使得1是小集合的交集。
那么剩下的数构成小集合数:{2}{3}{2,3}{空集}满足\(2^2\)
我们设:\(c_1\)={2},\(c_2\)={3},\(c_3\)={2,3},\(c_4\)={空集};
那么有大集合:{空集}、{\(c_1\)}、{\(c_2\)}、{\(c_3\)}、{\(c_4\)}、
{\(c_1,c_2\)}、{\(c_1,c_3\)}、{\(c_1,c_4\)}、{\(c_2,c_3\)}、{\(c_2,c_4\)}、{\(c_3,c_4\)}、
{\(c_1,c_2,c_3\)}、{\(c_1,c_2,c_4\)}、{\(c_1,c_3,c_4\)}、{\(c_2,c_3,c_4\)}、
{\(c_1,c_2,c_3,c_4\)}
去掉空集满足\(2^{2^2}-1\)
这个时候我们把1作为一个小集合\(c_5\)放进这所有的小集合里,现在是不是每一个小集合之间交集至少为1(为\(c_5\))?
4.整个容斥:
我们现在的\(f_0\)是
设\(f_i\)表示交集元素个数至少为i的方案数
根据容斥定理,剩下的数交集为空方案数:
\(f_0-f_1+f_2-f_3+…+(-1)^{n-k}f_{n-k}\)
把交集为空的方案数乘上强制选k个数作为子集的方案数\(C_n^k\)就结束了。
详细版傻瓜解释:
憋不出来
真憋不出来我是傻X
‘我等会接着写’
我超我感觉我写的是错误的怎么办啊()