Luogu CF451E Devu and Flowers 题解报告
【题目大意】
有n种颜色的花,第i种颜色的花有a[i]朵,从这些花中选m朵出来,问有多少种方案?答案对109+7取模
【思路分析】
这是一个多重集的组合数问题,答案就是:$$C_{n+m-1}^{n-1}-\sum_{i=1}^{n}C_{n+m-a[i]-2}^{n-1}+\sum_{1\le i<j\le n}C_{n+m-a[i]-a[j]-3}^{n-1}-…+(-1)^nC_{n+m-\sum_{i=1}^{n}a[i]-(n+1)}^{n-1}$$
在具体实现的时候,我们可以枚举x=0~2n-1,若x在二进制表示下共有p位为1,分别是第i[1],i[2]…i[p]位,则这个x就代表上式中的这一项:$$(-1)^pC_{n+m-a[i[1]]-a[i[2]]-…-a[i[p]]-(p+1)}^{n-1}$$
这样我们就可以成功地得到容斥原理计算多重集组合数的公式的每一项。
【代码实现】
#include<bits/stdc++.h>
#define ll long long
#define go(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
ll a[],m,ans=;
int inv[],n;
const int mod=1e9+;
int ksm(int x,int y){
int as=;
while(y){
if(y&) as=(ll)as*x%mod;
x=(ll)x*x%mod;
y>>=;
}
return as;
}
int C(ll y,int x){//计算组合数
if(y<||x<||x>y) return ;
y%=mod;
if(y==||x==) return ;
int as=;
go(i,,x-) as=(ll)as*(y-i)%mod;
go(i,,x) as=(ll)as*inv[i]%mod;
return as;
}
int main(){
go(i,,) inv[i]=ksm(i,mod-);//预处理逆元
scanf("%d%lld",&n,&m);
go(i,,n) scanf("%lld",&a[i]);
for(int x=;x<(<<n);x++){//枚举x
if(x==) ans=(ans+C(n+m-,n-))%mod;
else {
ll t=n+m;
int p=;
go(i,,n-)
if((x>>i)&) p++,t-=a[i+];
t-=p+;
if(p&) ans=(ans-C(t,n-))%mod;
else ans=(ans+C(t,n-))%mod;
}
}
cout<<(ans+mod)%mod<<endl;
return ;
}
代码戳这里
Luogu CF451E Devu and Flowers 题解报告的更多相关文章
- CF451E Devu and Flowers 解题报告
CF451E Devu and Flowers 题意: \(Devu\)有\(N\)个盒子,第\(i\)个盒子中有\(c_i\)枝花.同一个盒子内的花颜色相同,不同盒子的花颜色不同.\(Devu\)要 ...
- CF451E Devu and Flowers(容斥)
CF451E Devu and Flowers(容斥) 题目大意 \(n\)种花每种\(f_i\)个,求选出\(s\)朵花的方案.不一定每种花都要选到. \(n\le 20\) 解法 利用可重组合的公 ...
- CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...
- BZOJ1101 [POI2007]Zap 和 CF451E Devu and Flowers
Zap FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得到 ...
- [题解] [CF451E] Devu and Flowers
题面 题解 就是一个求\(\sum_{i= 1}^{n}x _ i = m\)的不重复多重集的个数, 我们可以由容斥原理得到: \[ ans = C_{n + m - 1}^{n - 1} - \su ...
- CF451E Devu and Flowers 数论
正解:容斥+Lucas定理+组合数学 解题报告: 传送门! 先mk个我不会的母函数的做法,,, 首先这个题的母函数是不难想到的,,,就$\left ( 1+x_{1}^{1}+x_{1}^{2}+. ...
- CF451E Devu and Flowers(组合数)
题目描述 Devu想用花去装饰他的花园,他已经购买了n个箱子,第i个箱子有fi朵花,在同一个的箱子里的所有花是同种颜色的(所以它们没有任何其他特征).另外,不存在两个箱子中的花是相同颜色的. 现在De ...
- CF451E Devu and Flowers
多重集求组合数,注意到\(n = 20\)所以可以用\(2 ^ n * n\)的容斥来写. 如果没有限制那么答案就是\(C(n + s - 1, n - 1)\).对每一个限制依次考虑,加上有一种选多 ...
- Luogu P1082 同余方程(NOIP 2012) 题解报告
题目传送门 [题目大意] 求关于x的同余方程 ax≡1(mod b)的最小整数解. [思路分析] 由同余方程的有关知识可得,ax≡1(mod b)可以化为ax+by=1,此方程有解当且仅当gcd(a, ...
随机推荐
- java基础之-I/O流和File类解析
在日常的java开发中少不了文件的读取和 写入,这就涉及到文件的I/O操作,今天就来总结下文件的IO操作,顺便文件的IO操作也需要File了的帮助,所以一起总结了. 以下图片为我根据其他博客所总结的内 ...
- HelloHibernate的创建过程
文章提纲 安装与配置 开发小结 建立项目 配置项目 创建代码 执行项目 安装与配置 JDK的安装:建议使用JRE 1.8以上: SQL Server 2000的安装:建议SQL Server 2000 ...
- 华为笔记HOSTS,便于访问云端存储
# Copyright (c) - Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windo ...
- 11 Django RESTful framework 实现缓存
01-安装 pip install drf-extensions 02-导入 from rest_framework_extensions.cache.mixins import CacheRespo ...
- 序言 - PHP零基础快速入门
我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...
- 在oracle表中增加字段,并调整字段的顺序
增加字段的语句很简单,以用户身份连接oracle服务: alter table tablename add(colname coltype); # 填上表名.字段名.字段类型 修改字段顺序前,查看表中 ...
- storybook实践
很久之前就听说过storybook,一直想实践一下
- WMI测试器
WMI是... 来自百度百科:WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术:用户可以使用 WMI 管理 ...
- Vue.js 2.x笔记:指令(4)
1. 内置指令 指令是Vue.js 中一个重要的特性,主要提供了一种机制将数据的变化映射为DOM 行为. Vue.js 本身提供了大量的内置指令来进行对DOM 的操作,同时可以开发自定义指令. 2. ...
- jmeter压测数据库,抓包工具,python基础
jmeter压力测试 前提场景的设置:单场景(单个接口进行压力测试一个请求)或混合场景(有业务流程的场景进行压力测试多个请求),压测时间一般在5--1515分组具体看需求. 数据准备:数据量少和数据量 ...