组合数学(第四抄)容斥原理

注明:此篇的原理来自于《组合数学》原书第五版。

这篇是组合数学第四更了,以后可能还继续写,拖延症犯一下。

 

定理1:集合S中不具有性质P1P2Pm的对象个数由下面的交错表达式给出:

|\overline{A1}\bigcap \overline{A2}\bigcap...\bigcap \overline{Am}|=|S|-\sum |Ai|+ \sum |Ai\bigcap Aj|-\sum |Ai\bigcap Aj\bigcap Ak|+...+(-1)^{m}|A1\bigcap A2\gcap ...\bigcap Am|

我们来证明一下。

想得美,略(其实我也不会)。

 

穿插点知识,下面有用得到,对于第一个和\sum |Ai|对所有1子集求和,故有\binom{m}{1}第二个和\sum |Ai\bigcap Aj|对所有2子集求和,故有\binom{m}{2}以此类推,对于第m个和,有\binom{m}{m}所有我们根据 二项式定理,得到总和为 2^m 个

 

推论1:集合S至少具有性质P1,P2,…,Pm之一的对象个数由下式给出:

|A1\bigcup A2\bigcup...\bigcup Am|=\sum |Ai|- \sum |Ai\bigcap Aj|+\sum |Ai\bigcap Aj\bigcap Ak|-...+(-1)^{m+1}|A1\bigcap A2\gcap ...\bigcap Am|

证明:           \left | A1\bigcup A2\bigcup...\bigcup Am \right |=\sum \left | S \right | -\left | \overline{ A1\bigcup A2\bigcup...\bigcup Am } \right |

 又已知,        \left | \overline{ A1\bigcup A2\bigcup...\bigcup Am } \right |=\left | \overline{A1}\bigcap \overline{A2}\bigcap...\bigcap \overline{Am} \right |

  所以       \left | A1\bigcup A2\bigcup...\bigcup Am \right |=\sum \left | S \right | -\left | \overline{A1}\bigcap \overline{A2}\bigcap...\bigcap \overline{Am} \right |

 

例子:求从11000之间不能被 5,68整除的整数个数。

 

解决:设P1表示能被5整除的性质,P2表示能被6整除的性质,P3表示能被8整除的性质。

          对于i=1,2,3,设AiS中具有Pi性质的整数组成的集合。

故我们要求  \overline{A1}\bigcap \overline{A2}\bigcap \overline{A3}

|A1|=⌊1000/5⌋ =200 ⌊r⌋表示不超过r的最大整数),|A2|=⌊1000/6⌋=166|A3|=⌊1000/8⌋

|A1 A2| =⌊1000/30⌋=33 lcm{5,6}=30),同理,|A1 A3|=⌊1000/40⌋=25|A2 A3|=⌊1000/24⌋=41

|A1 A2 A3|=⌊1000/120⌋=8 lcm{5,6,8}=120),

因此根据容斥定理可知,在11000之间不能被5,6,8整除的整数个数等于

|\overline{A1}\bigcap \overline{A2}\bigcap \overline{A3}|=1000-200+166+125+33+25+41-8=600

 

 

 

容斥原理的特殊情况

假设在容斥原理中出现的集合 A1?2∩?3∩?的大小仅依赖于k不依赖在交集中使用了哪k个集合。因此,就存在常数  a0,a1,a2,..,am ,使得

a0=|S|a1=|A1|=|A2|=… =|Am|,

a2=|A1?2|=…=|?????|

a3=|A1?2∩?3|=…=|??????|

am=|?1∩?2∩…∩??|

在这种情况下,容斥原理可以简化成 :

\left | \overline{A1}\bigcap \overline{A2}\bigcap...\bigcap \overline{Am} \right |=a0-\binom{m}{1}*a1+\binom{m}{2}*a2-\binom{m}{3}*a3+...+(-1)^k\binom{m}{k}*ak+...+(-1)^m*am

 

例题:在099999之间有多少含有数字2,58的整数?

解决:设S099999之间的集合(把S中的每个整数都看做有5个数字,不够补为前导0),

           ?1是一个不包含数字2整数的性质,依次类推。

             Aii=1,2,3)是S中具有性质Pi的整数的集合。

 

故我们需求:\overline{A1}\bigcap \overline{A2}\bigcap...\bigcap \overline{Am}

利用上文容斥原理的特殊情况 ,我们可以得

a0=10^5a1=9^5a2=8^5a3=7^5

咱就举a2来说说,在0-99999之间不包含2,5的整数个数(即集合|A1A2|的大小,当然也可以取其它两个,随意)等于多重集合{50,51,5∙3,5∙4,5∙6,57,5∙8,5∙9} (n?表示nk),的5排列的数目,这个集合包含8个符号,每个符号的重数是5,所以它的5排列数目等于8^5

最后我们根据容斥原理的特殊情况公式得到答案为 10^5-3*9^5+3*8^5-7^5

 

给出几道题:

题1:hdu 1695

题解:https://blog.csdn.net/LJD201724114126/article/details/82661566

 

题二:计蒜客

题解:https://blog.csdn.net/LJD201724114126/article/details/82620754

 

题三:hdu 4407

题解:https://blog.csdn.net/LJD201724114126/article/details/83107747

咦,这里的题解链接好像都是我本人的,啊,不管了,就当施舍点访问量给我了。

 

总结一下:

        这里用的容斥,很巧妙的应用二进制来处理,每个数的二进制位表示取于不取,这点可以看成是以后解题的思想,应用二进制来处理取于不取这类似的问题。

 

我的标签:做个有情怀的程序员。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值