Devu有N个盒子,第i个盒子中有AiAi枝花。

同一个盒子内的花颜色相同,不同盒子内的花颜色不同。

Devu要从这些盒子中选出M枝花组成一束,求共有多少种方案。

若两束花每种颜色的花的数量都相同,则认为这两束花是相同的方案。

结果需对109+7109+7取模之后方可输出。

输入格式

第一行包含两个整数N和M。

第二行包含N个空格隔开的整数,表示A1,A2,…,ANA1,A2,…,AN。

输出格式

输出一个整数,表示方案数量对109+7109+7取模后的结果。

数据范围

1≤N≤201≤N≤20,
0≤M≤10140≤M≤1014,
0≤Ai≤10120≤Ai≤1012

输入样例:

3 5
1 3 2

输出样例:

3

题意:让你在n朵花里面选择m朵,其中有些花朵相同,然后求方案数有多少种,不用顺序排列
思路:这里其实就是一个多重集的组合数问题 多重集的排列问题 有k个物品,总共有n个种类,第ni个种类有a[i]个物品,问全排列数是多少
就是 n!/(n1!*n2!*....ni!),道理很简单,全部不相同的全排列数是n!,但是这个其中有重复,所以我们需要去重,所有我们对每个种类求个全排列
然后除就行,其中每个种类的重复又可以和其他种类的重复产生联系,所以是乘法原理,把所有的种类全排列相乘即可
多重集的组合问题
有k个物品,总共有n个种类,第ni个种类有a[i]个物品,然后从中选择m个,问有多少个选择方法 多重集的组合数的弱化版(m=<a[i])
如果是基于这个条件的话,那么我们就可以直接采用隔板法来计算,首先我们选择m个商品,我们条件那么就只有在每个种类选择的个数加起来等于m即可
又因为我们的m不会大于每个种类个数,那么我们就把他分为n组即可,使用n-1个隔板,那么这个的答案就是
C(n+m-1,n-1) 我们把我们的m个商品分个类,分成n份,所有我们还加入了n-1个隔板,所以就是这个答案 多重集的组合数的强化版(m<=n)
首先这个不能和上面用一样的方法了,上面的我们限制了,m<=a[i],说明我们无论怎么对m进行分割,单个分组的个数不可能大于输入的组的个数,但是现在给定你的那个条件有可能出现
单个分组大于输入分组个数,这样的方案都是不可行的,在这里我们就需要使用容斥来去掉我们无法使用的方案,这里我们可以使用原来的方案去减掉有一个超过限制,两个,三个.....n个
然后这1,2,3,....n个中又有重复,所以我们需要使用容斥
Ck−1k−r−1−∑i=1kCk−1k+r−ni−2+∑1≤i≤j≤nCk−1k+r−ni−nj−3−...+(−1)kCk−1k+r−∑ki=1ni−(k+1)
写代码的时候我们枚举所有情况,我们使用状压,当前二进制1就代表容斥选择了这个项
#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
typedef long long ll;
ll n,m;
ll a[];
ll inv[];
ll quick_pow(ll a,ll b)
{
ll ans=;
while(b){
if(b&) ans=(ans*a)%mod;
b=b/;
a=(a*a)%mod;
}
return ans;
}
ll C(ll n,ll m){
if(n<||m<||n<m) return ;
n%=mod;
if(n==||m==) return ;
ll ans=;
for(int i=;i<m;i++){
ans=(ans*(n-i))%mod;
}
for(int i=;i<=m;i++){
ans=(ans*inv[i])%mod;
}
return ans;
}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) inv[i]=quick_pow(i,mod-);//求出1-n的逆元,留着求组合数乘积的时候使用
ll ans=;
for(int i=;i<(<<n);i++){
if(i==){
ans=(ans+C(n+m-,n-))%mod;
}
else{
ll p=;
ll t=n+m;
for(int j=;j<n;j++){
if((i>>j)&){
p++;
t-=a[j+];
}
}
t-=p+;
if(p&){
ans=(ans-C(t,n-))%mod;
}
else{
ans=(ans+C(t,n-))%mod;
}
}
}
cout<<(ans+mod)%mod;
}

AcWing 214. Devu和鲜花 (容斥)打卡的更多相关文章

  1. CF451E Devu and Flowers(容斥)

    CF451E Devu and Flowers(容斥) 题目大意 \(n\)种花每种\(f_i\)个,求选出\(s\)朵花的方案.不一定每种花都要选到. \(n\le 20\) 解法 利用可重组合的公 ...

  2. Codeforces Round #258 (Div. 2) E. Devu and Flowers 容斥

    E. Devu and Flowers 题目连接: http://codeforces.com/contest/451/problem/E Description Devu wants to deco ...

  3. AcWing 231. 天码 (容斥)打卡

    题目:https://www.acwing.com/problem/content/233/ 题意:给你n个不同的数,让你选取一个四元组,gcd为1,让你求这样的四元组数量是多少 思路:我们单独直接去 ...

  4. CodeForces - 451E Devu and Flowers (容斥+卢卡斯)

    题意:有N个盒子,每个盒子里有fi 朵花,求从这N个盒子中取s朵花的方案数.两种方法不同当且仅当两种方案里至少有一个盒子取出的花的数目不同. 分析:对 有k个盒子取出的数目超过了其中的花朵数,那么此时 ...

  5. Codeforces 439E Devu and Birthday Celebration 容斥

    Devu and Birthday Celebration 我们发现不合法的整除因子在 m 的因子里面, 然后枚举m的因子暴力容斥, 或者用莫比乌斯系数容斥. #include<bits/std ...

  6. UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)

    9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/problem/214 题目大意: 请自行阅读. 题解: 官方题解讲得相 ...

  7. CF(439E - Devu and Birthday Celebration)莫比乌斯容斥

    题意:将n个糖果插入f-1个挡板分成f分(a1,a2,a3...af). 问有多少种分法能够使得gcd(a1,a2,a3...af)=1; 解法.莫比乌斯容斥,首先按1为单位分,这时候有C(n-1,f ...

  8. CF451E Devu and Flowers (组合数学+容斥)

    题目大意:给你$n$个箱子,每个箱子里有$a_{i}$个花,你最多取$s$个花,求所有取花的方案,$n<=20$,$s<=1e14$,$a_{i}<=1e12$ 容斥入门题目 把取花 ...

  9. Codeforces Round #258 (Div. 2) 容斥+Lucas

    题目链接: http://codeforces.com/problemset/problem/451/E E. Devu and Flowers time limit per test4 second ...

随机推荐

  1. 杂项-报表-Minitab:Minitab百科

    ylbtech-杂项-报表-Minitab:Minitab百科 Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专 ...

  2. 笔记:JFB 部署新环境,要更改的参数清单列表

    ylbtech-笔记:JFB 部署新环境,要更改的参数清单列表 1. Web.config返回顶部   2. JS返回顶部 1./m/js/utils.js var utils = {} 序号 参数 ...

  3. 热经-北京中地时空数码科技有限公司-研发工程师(WEBGIS方向)

    一面: 登记,填写个人信息 笔试 选择题: HTML,CSS,JS 的选择题,都是基础题.其中有一道问哪个不是 document 的属性或方法,我在 bgColor 和 focus() 上面纠结了一下 ...

  4. Eclipse Luna安装Hibernate Tools 4.2.3不显示,设置Eclipse运行的JDK

    Eclipse Luna安装Hibernate Tools 4.2.3不显示,设置Eclipse运行的JDK,有需要的朋友可以参考下. eclipse-jee-luna-SR2中安装Hibernate ...

  5. 支付宝PC端接入PHP

    引入支付宝接口 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['order_id']; $orde ...

  6. FFT&NTT数学解释

    FFT和NTT真是噩梦呢 既然被FFT和NTT坑够了,坑一下其他的人也未尝不可呢 前置知识 多项式基础知识 矩阵基础知识(之后会一直用矩阵表达) FFT:复数基础知识 NTT:模运算基础知识 单位根介 ...

  7. python基础实现tcp文件传输

    准备工作,实现文件上传需要那些工具呢? socket(传输).open()(打开文件).os(读取文件信息),当然还有辅助类sys和json,下面我们开始吧 import socket,sys imp ...

  8. 转 LoadRunner错误处理函数

    在脚本的Run-time Settings中,可以设置在脚本运行过程中发生错误的处理方式.进入到Run-time Settings中,切换到Miscellaneous标签页,可以看到Error Han ...

  9. select 和 order by

    select 的优先级要高于order by,相当于是select先创建了一个临时表,再通过临时表去排序.所以,对于一些sum()的汇总,在进行排序,实际是排序的select后的字段,而不是表里的那个 ...

  10. 在学react时候找不到static/js/bundle.js

    看如图上面bundle.js,我在项目中和配置文件中都没有找到这个JS文件,然后我就觉得很诧异,然后各种查找,终于找到一篇文章,在此记录一下 第一步:npm run start            ...