今天看《算法竞赛进阶指南》,刚好看到了容斥原理一章,所以就和大家说一下我对容斥原理的理解:
容斥原理是一种人们为了可以不遗漏,不重复发明的新计数方法。
基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去
比如下面这张图:
先把A、B、C集合加起来,再去掉A∩B ,B∩C ,A∩C 和 A∩B∩C的。
这是容斥原理的计算公式:
先把全部加在一起,去掉两个集合重复的,去掉三个集合重复的,一直下去,就会得到结果
还有推荐练习题:
https://ac.nowcoder.com/acm/contest/1027/A
这道题利用了容斥原理的思想,不过还需要加一个定理,就是卢卡斯定理。
下篇详细介绍......