容斥原理

容斥原理本身比较简单,在此不作介绍。在这里要引入的是几个新概念:
1.多重集:广义上的元素可重复集合。
2.多重集的排列数:见蓝书P171
3.多重集的组合数:见蓝书P171,P176

关于多重集的组合数的任意情况的证明思路:利用容斥原理,先考虑将多重集变成一个每个元素都有无数个的无穷集。那么这样取出r个的方案就可以直接用情况3的初等公式计算。而接下来就是关键的容斥原理的应用:首先考虑第一个数a1取n1+1个的情况,再依次考虑剩下的数,并在答案中减去这种情况的和。第二步考虑取两个数ai,aj,且两个数的个数均为ni+1,nj+1,那么这种情况就要加上,以此类推。

例题1:AcWing 214.Devu和鲜花

这题实际上是一个多重集组合数任意情况求法的模板题。关键在于代码的实现:对于算式中的每一项,求各个交集时考虑用二进制枚举。二进制上的每一位都代表这个位置上的元素要除去,这样可以不重不漏地枚举所有的集合。

#include<iostream>
using namespace std;
const int N=22,mod=1e9+7;
typedef long long ll;
ll a[N],inv[N];
ll qmi(ll a,ll b,ll p){ll res=1;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res%p;
}
ll C(ll a,ll b){if(a<0 || b<0 || a<b) return 0;ll ans=1;a%=mod;if(a==0 || b==0) return 1;for(int i=0;i<b;i++){ans=ans*(a-i)%mod;} for(int i=1;i<=b;i++){ans=ans*inv[i]%mod;}return ans;
}
int main(){ll n;ll m;cin>>n>>m;for(int i=1;i<=n;i++) inv[i]=qmi(i,mod-2,mod);for(int i=0;i<n;i++) cin>>a[i];ll ans=0;for(int i=0;i<(1<<n);i++){if(!i){ans+=C(n+m-1,n-1);}else{ll k=n+m-1,p=0;for(int j=0;j<n;j++){if(i>>j&1){p++;k-=(a[j]+1);}}if(p&1){ans=(ans-C(k,n-1))%mod;}else{ans=(ans+C(k,n-1))%mod;}}}cout<<(ans+mod)%mod<<endl;return 0;
}

Mobius函数

容斥原理与Mobius函数相关推荐

  1. c莫比乌斯函数_数论——容斥原理、莫比乌斯函数

    数论--容斥原理.莫比乌斯函数由于某些玄学原因,有些公式的减号未显示,如果有的符号显示为空格,则默认为减号. 1.容斥原理:时间复杂度为 ,下面会有证明. 举一个简单的例子:用韦恩图来思考,求 . . ...

  2. Mobius函数计算 定义+代码模板

    Mobius函数定义为,输入一个正整数N,当N=1时,函数值为1,当N不为1时,首先在稿纸上将它分解质因数,若某质因数的个数大于1,则函数值为0,如N=45,45=3*3*5,3出现了两次,故函数值为 ...

  3. hdu 1286 找新朋友 (容斥原理 || 欧拉函数)

    Problem - 1286 用容斥原理做的代码: 1 #include <cstdio> 2 #include <iostream> 3 #include <algor ...

  4. Mobius函数(模板)

    AcWing215. 破译密码 题意 对于给定的整数a,b和d,有多少正整数对x,y,满足x≤a,y≤b,并且gcd(x,y)=d.对于给定的整数 a,b 和 d,有多少正整数对 x,y,满足 x≤a ...

  5. 李煜东算法进阶指南打卡题解

    算法竞赛进阶指南 一.0x00 基本算法 1)位运算 2)递推与递归 3)前缀和与差分 4)二分 5)排序 6)倍增 7)贪心 8)习题 二.0x10 基本数据结构 1)栈 2)队列 3)链表与邻接表 ...

  6. 莫比乌斯函数(Mobius)的求法 每日一遍,算法再见!

    莫比乌斯函数 我们用符号u表示莫比乌斯函数,u(x)表示x的莫比乌斯函数 ①x=1,u(1)=1. ②x=p1p2p3p4-pk,其中p1~pk是x的素数因子,u(x)=(−1)k(-1)^k(−1) ...

  7. 容斥原理和概率与数学期望

    容斥原理就是全集减去其他不满足的集合的并集,E-(E1∪E2∪E3∪.....∪Ek)=E-E1-E2-E3-...+E1∩E2+E2∩E3..意思是奇数个的符号就是-,偶数个就是+,一般用二进制枚举 ...

  8. Mobius反演总结

    刷了一些浅显的反演题目, 做一个总结 知识点1 给定n个数(可以是1-n), 求有多少数与x互质 f(x)=∑d|xu[d]∗cnt[d] f(x) = \sum_{d|x}u[d]*cnt[d] 其 ...

  9. Mobius反演学习

    这篇文章参考了许多资料和自己的理解. 先放理论基础. 最大公约数:小学学过,这里只提一些重要的公式: $·$若$a=b$,则$\gcd(a,b)=a=b$: $·$若$\gcd(a,b)=d$,则$\ ...

  10. 组合数学$2鸽巢原理与容斥原理

    C2 鸽巢与容斥 S1 鸽巢原理 1)鸽巢定理: q i > 0 , ∑ i = 1 n q i − n + 1 q_i\gt 0, \sum\limits_{i=1}^n q_i -n+1 q ...

最新文章

  1. 2019 Mac装Cocoapods的步(cai)骤(keng)记录
  2. Linux acl权限
  3. Modernizr.js-检测浏览器对HTML5和CSS3的支持程度
  4. 【jzoj】2018/2/2 NOIP普及组——D组模拟赛
  5. 无刷电调_新款好盈XR10 PRO G2电调搭载XRAY T4车架简评
  6. Good Time 冲刺 六
  7. C# 禁止修改已装箱了的值类型的字段值,但是可以通过接口的方式实现
  8. Linux内核分析 - 网络[十五]:陆由表[再议]
  9. 喝什么汤对肝脏有好处?
  10. 多态与异常处理——动手动脑
  11. python 编译成exe vmp加密_加密软件VMProtect入门教程
  12. 海康摄像头拍照(java版,拿走即用)
  13. java rtf,用Java实现RTF到PDF
  14. 北京中医药大学22春《生理学Z》平时作业3【辅导答案】
  15. 数据仓库,数据集市,数据湖
  16. 嵌入式linux烧录文件格式,嵌入式文件系统镜像制作及烧写
  17. 2020年上半年教育舆情新闻热点事件案例分析报告合集
  18. 丢鸡蛋 [Python3]
  19. Cloudera Hadoop:CCAH、CCA、CCP
  20. 中国电子学会-全国青少年软件编程等级考试标准 (Python 语言 1-6 级)

热门文章

  1. linux命令gw,Linux 基础命令
  2. java中composition_Java基础教程之组合(composition)
  3. H 幻方变换(puzzle)(NYIST 2019年校赛)
  4. python实战因子分析和主成分分析
  5. 【ACO MTSP】基于matlab粒子群优化蚁群算法求解多旅行商问题【含Matlab源码 1616期】
  6. win10动态壁纸设置
  7. python编程输入名字配对情侣网名_输入名字查另一半名字,怎样用一半情侣网名查...
  8. 当编程语言都变成女孩子
  9. vue 路由守卫的使用
  10. 手机连接电脑DCIM目录下文件夹和图片显示不全