首页 > 代码库 > 容斥原理
容斥原理
容斥原理简介(很无耻的把ysy神犇讲课的课件摘抄下来了):
记f(S)表示满足集合S中至少一个条件的方案数,g(S)表示满足集合S中所有条件的方案数。
f(S)=Σ(-1)^(|T|-1)*g(T),其中T为S的非空子集。
通俗地说就是先把满足一个条件的都加上,这时候满足两个条件的被加了两次,所以要减掉一次,然后满足三个条件的被减成0次了,要加上一次…...
还有另一种形式。
记h(S)表示不满足集合S中所有条件的方案数。
g(S)=Σ(-1)^|T|*h(T),其中T为S的子集。
通俗地说就是先加上所有方案,然后扣掉不满足一个条件的方案,这时候不满足两个条件的被扣了两次,所以要加上一次,然后不满足三个条件的被加回1次了,所以要扣掉一次……
应用:
1.对一个n*m的棋盘染色,每格可以是黑色或白色。
要求每行每列都有黑格。
求方案数对10^9+7取模的结果。
n,m<=10^3。
分析:套用上面的,题目要求的是满足“每行每列”,也就是相当于求g(S)嘛!"所有条件",也就是第二种容斥原理。既然要求不满足题意的行和列,即h(T),
枚举行数i,列数j,选出i行j列的方案数就是C(n,i) * C(m,j),那么我们怎么知道这i行j列全选白格的方案数呢?我们考虑没有被选上的n-i行,m-j列,这些行和列可以随意的选黑或者选白,也就是说方案数为2^(n-i)(m-j),根据容斥原理,答案为.
容斥原理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。