BZOJ 2839 浅谈容斥原理组合计数及欧拉定理优化二维幂指数

这里写图片描述
世界真的很大
前几天做了一道容斥原理的题,发现并不怎么会这类东西,赶快找几道题写写
看了几篇题解不知所云
果然还是不简单,按自己理解写了过后发现过不了样例
发现还是考虑的不仔细,认真研究一波之后才马马虎虎地搞懂了一知半解

看题先:

description:

一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得
它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~)

input:

一行两个整数N,K

output:

一行为答案。

不好意思之前的题解是口胡233
这道题并不是一个容斥原理那么简单,但是网上的题解都没有提到这一点。。。做了一点补充希望耐心看完

这道题他说“交集元素个数刚好为K”的方案数
那么就很容易想到容斥原理,即:
大于等于K的 - 大于等于K+1的 + 大于等于K+2的 and so on
那么现在的问题就在于求出来大于等于某个值的方案数
比如现在来找一下交集大于等于 i 的方案数
首先枚举交集i,即从n个里面选i个作为交集元素的方案数,这一步自然是 C(n,i)。
然后考虑整个集合还剩n-i个元素,剩余的子集个数就是2^(n-i)
现在我们相当于是给每一个剩下的子集添加这i个元素,这样他们的交集就至少为i了
然后剩下的每一个子集有选与不选,这样方案数就是2^(2^(n-i))
但是所有集合不能同时不选
也许会有疑问全都不选就选这i个不也是一种方案吗?
其实不然
全都不选等价于选了空集,而空集也是属于那2^(n-i)种子集的
全都不选即是说空集也不选,这当然是不合法的,所以要减一
即: 2^(2^(n-i))-1

然后这样算一下,写出来发现,过不了样例。。
样例3 2
那我们枚举的其实就是大于等于2的减去大于等于3的

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值