容斥定理+鸽巢原理
容斥定理
要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。
容斥原理:在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。
公式表述
公式的解释:
目的是求解m个集合的并集,首先将m个集合相加,减去集合间两两相交的部分,加上三三相交的部分,再减去四四相交的部分……一直到m个集合相交的部分,当m为偶数时,最后一项的符号为负数,否则为正数。
举例
- 当存在两个集合A与B,容斥关系公式为:A∪B =|A∪B| = |A|+|B| - |A∩B |
- 当存在三个集合A、B、C,容斥关系公式为:|A∪B∪C| = |A|+|B|+|C| - |A∩B| - |B∩C| - |C∩A| + |A∩B∩C|
简单的说就是选中的是奇数个集合就相加,选中的是偶数个集合就相减,
在这里我们介绍一种方法那就是二进制枚举法;
我们先来思考一下这个问题:如果要对n个物体进行选择,那么有多少种情况?
这个我们应该怎么做呢?每个问题只有两种情况,那就是选与不选,这就相当于十几个集合求并集,如果选的是奇数个物品那么我们应该去加的,如果选的是偶数的物品,那么我们应该是相减的,但是我们应该怎么选呢?我们要实现的目的就是每次选的时候我们呢要知道哦我们选了多少个。而且我们还要知道我们选看谁,那么该怎么办呢?这就用到二进制枚举法了,既然这个方法的名字和二进制有关那么我们肯定也要用到二进制了是吧;
假如我们有三件物品,我们会有8种选择方案,我们先把他们一一的列举出来2