题面

JSOI2011 分特产

有 \(n\) 个不同的盒子和 \(m\) 种不同的球,第 \(i\) 种球有 \(a_i\) 个,用光所有球,求使每个盒子不空的方案数。

数据范围:\(1\le n,m,a_i\le 1000\)。


蒟蒻语

今天做了几道黑题,蒟蒻的做法非常蒟蒻,看上去很厉害其实很废,巨佬的做法是容斥,秒杀一切。

所以蒟蒻拿这道水题讲讲自己的做法。希望巨佬教蒟蒻容斥 \(\tt /kel\)。


蒟蒻解

看到盒子不能空,先二项式反演。

\(f(i)\) 表示 \(i\) 个盒子空,剩下非空的方案数;\(g(i)\) 表示 \(i\) 个盒子空,剩下随意。

\[g(i)=\sum_{x=i}^n {x\choose i}f(x)\Longleftrightarrow f(i)=\sum_{x=i}^n{x\choose i}(-1)^{x-i}g(x)
\]

然后考虑 \(g(i)\) 怎么求:因为 \(n-i\) 个可以空可以不空,所以可以构造生成函数:

\[\left(\prod_{j=1}^m(1+x_j+x_j^2+x_j^3+\cdots)\right)^{n-i}
\]

\(g(i)\) 就等于 \(\prod_{j=1}^mx_j^{a_j}\) 的项数。

所以可以每个 \(x_j\) 分开来考虑,用隔板法,得出:

\[g(i)={n\choose i}\prod_{j=1}^m{a_j+n-i-1\choose n-i-1}
\]

然后答案就是(当 \(x=n\) 时 \(n-x-1=-1\),所以结果为 \(0\),不需要枚举):

\[f(0)=\sum_{x=0}^{n-1}(-1)^{x}{n\choose x}\prod_{j=1}^m{a_j+n-x-1\choose n-x-1}
\]

代码

跟巨佬的代码是一样的,只不过推导过程不同。

#include <bits/stdc++.h>
using namespace std; //Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair(a,b)
#define x first
#define y second
#define be(a) a.begin()
#define en(a) a.end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f; //Data
const int N=1e3,T=N<<1;
const int mod=1e9+7;
int n,m,a[N],c[T+1][T+1];
int g(int x){
int res=c[n][x];
for(int i=0;i<m;i++)
res=(ll)res*c[a[i]+n-x-1][n-x-1]%mod;
return res;
} //Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=0;i<=T;i++){
c[i][0]=c[i][i]=1;
for(int j=1;j<=i-1;j++)
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
for(int i=0;i<m;i++) cin>>a[i];
int ans=0;
for(int i=0;i<n;i++){
if(i&1) (ans+=mod-g(i))%=mod;
else (ans+=g(i))%=mod;
}
cout<<ans<<'\n';
return 0;
}

祝大家学习愉快!

题解-JSOI2011 分特产的更多相关文章

  1. 【BZOJ4710】[Jsoi2011]分特产 组合数+容斥

    [BZOJ4710][Jsoi2011]分特产 Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同 ...

  2. BZOJ 4710: [Jsoi2011]分特产 [容斥原理]

    4710: [Jsoi2011]分特产 题意:m种物品分给n个同学,每个同学至少有一个物品,求方案数 对于每种物品是独立的,就是分成n组可以为空,然后可以用乘法原理合起来 容斥容斥 \[ 每个同学至少 ...

  3. bzoj4710: [Jsoi2011]分特产 组合+容斥

    4710: [Jsoi2011]分特产 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 289  Solved: 198[Submit][Status] ...

  4. bzoj4710 [Jsoi2011]分特产(容斥)

    4710: [Jsoi2011]分特产 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 814  Solved: 527[Submit][Status] ...

  5. 4710: [Jsoi2011]分特产

    4710: [Jsoi2011]分特产 链接 分析: 容斥原理+隔板法. 代码: #include<cstdio> #include<algorithm> #include&l ...

  6. 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)

    4710: [Jsoi2011]分特产 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 99  Solved: 65 Description JYY 带 ...

  7. [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)

    4710: [Jsoi2011]分特产 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 395  Solved: 262[Submit][Status] ...

  8. BZOJ 4710 [Jsoi2011]分特产 解题报告

    4710 [Jsoi2011]分特产 题意 给定\(n\)个集合,每个集合有相同的\(a_i\)个元素,不同的集合的元素不同.将所有的元素分给\(m\)个不同位置,要求每个位置至少有一个元素,求分配方 ...

  9. ●BZOJ 4710 [Jsoi2011]分特产

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4710 题解: 容斥,组合先看看这个方案数的计算:把 M 个相同的东西分给 N 个人,每个人可 ...

随机推荐

  1. Freebsd10.2安装包升级pkg引起环境破坏的解决

    前言 freebsd10.2环境在安装一个新软件包的时候提示升级pkg到1.10.1,然后点击了升级,然后整个pkg环境就无法使用了 记录 升级完了软件包以后第一个错误提示 FreeBSD: /usr ...

  2. HttpClient4.5X使用-集成微服务

    HttpClient4.5X使用-集成微服务       1.什么是HttpClient HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直 ...

  3. spring cloud 入门系列

    springcloud入门总结转发自:https://www.cnblogs.com/sam-uncle/p/9340390.html 最近看到微服务很火,也是未来的趋势, 所以就去学习下,在dubb ...

  4. 有关线上系统点击没有任何相应得问题思考,主要针对PC端应用程序

    1.问题得起因 前段时间,客户得某些机器上,点击应用系统得快捷方式,没有任何响应,不弹出程序主界面,也没有任何得报错提示,甚至程序得错误日志也没有任何输出. 当时,听说发生这种情况得时候,有点懵了,不 ...

  5. matlab 数组操作作业

    写出下列语句的计算结果及作用 1.A= [2 5 7 3 1 3 4 2];    创建二维数组并赋值 2.[rows, cols] = size(A);    ​把A的尺寸赋值给数组,rows为行, ...

  6. 这个厉害了,阿里P7大佬都在看的SpringCloud 总结,帮你梳理全部知识点!

    微服务 微服务架构是一种以一些微服务来替代开发单个大而全应用的方法,每一个小服务运行在自己的进程里,并以轻量级的机制来通信, 通常是 HTTP RESTful API.微服务强调小快灵, 任何一个相对 ...

  7. Mac系统应该用什么软件进行清理?

    作为一枚资深的Windows系统使用者,小编刚刚转向Mac系统的怀抱时,各种不适应,Windows系统中普遍使用的360清理软件目前暂时没有Mac版本的,这就让小编很是头疼了,大家的Mac都是用的什么 ...

  8. ABBYY FineReader如何将图片转换为Excel

    ABBYY FineReader的OCR文字识别功能很强大,不但可以将文件转换为文本文档或Word文档,也可以识别PDF文件或者图片上的表格,并且转换为Excel文件.下面我就为大家演示一下怎么用AB ...

  9. 在FL Studio中通过Key Tracking来改善声音

    FL Studio中的关键点跟踪(Key Tracking),是一种为MIDI添加更多动态效果的便利工具,在FL Studio中通过使用这个插件能力,我们无需担心自动化或手动调整参数等比较麻烦的问题. ...

  10. 【VUE】2.渲染组件&重定向路由

    1.删除多余组件,使环境赶紧 1. 整理App.vue, 删除多余内容,在template 模板区域增加一个路由占位符 router-view:渲染路径匹配到的视图组件 <template> ...