bzoj4710 [Jsoi2011]分特产(容斥)
4710: [Jsoi2011]分特产
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 814 Solved: 527
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 3 3 5
Sample Output
如果不保证每个同学都分到特产,那就比较好算
对于每种特产的数量$A_i$,我们求把它分成$n$个非负整数的方案数
先假装给每个非负整数+1,问题转化为把$A_i+n$分成$n$个正整数的方案数
用上熟悉的插板法,$A_i+n-1$个空,一个空最多插一次板,共插$n-1$次板,答案即为$C(A_i+n-1,n-1)$
蓝后考虑减去有同学没拿到特产的方案数
显然要用上熟悉的容斥原理辣:减去1个同学没拿到的方案,加上2个同学没拿到的方案,.........
于是最终$ans=\sum_{i=0}^{n}\; (-1)^i*C(n,i)*\; \prod_{j=1}^{m}\; C(A_i+n-j-1,n-j-1)$
#include<iostream>
#include<cstdio>
#include<cstring>
#define rint register int
using namespace std;
typedef long long ll;
#define N 2005
const ll P=1e9+;
inline ll Md(ll a){return a<P?a:a-P;}
int n,m;ll C[N][N],ans,A[N];
void prep(){
C[][]=;
for(rint i=;i<N;++i){
C[i][]=;
for(rint j=;j<=i;++j)
C[i][j]=Md(C[i-][j]+C[i-][j-]);
}
}
ll F(int x){
if(x==) return ;//注意边界
ll re=;
for(rint i=;i<=m;++i) re=re*C[A[i]+x-][x-]%P;
return re;
}
int main(){
scanf("%d%d",&n,&m); prep();
for(rint i=;i<=m;++i) scanf("%lld",&A[i]);
for(int i=;i<n;++i)
ans=Md((ans+1ll*((i&)?-:)*C[n][i]*F(n-i))%P+P);
printf("%lld",ans);
return ;
}
bzoj4710 [Jsoi2011]分特产(容斥)的更多相关文章
- BZOJ4710 [Jsoi2011]分特产 容斥
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4710 题解 本来想去找一个二项式反演的题的,结果被 https://www.cnblogs.c ...
- BZOJ 4710: [Jsoi2011]分特产(容斥)
传送门 解题思路 首先所有物品是一定要用完的,那么可以按照物品考虑,就是把每种物品分给\(n\)个人,每个人分得非负整数,可以用隔板法计算.设物品有\(m\)个,方案数为\(C(n+m-1,n-1)\ ...
- bzoj4710: [Jsoi2011]分特产 组合+容斥
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 289 Solved: 198[Submit][Status] ...
- [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 262[Submit][Status] ...
- BZOJ4710: [Jsoi2011]分特产【组合数学+容斥】
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- Bzoj4710 [Jsoi2011]分特产
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 96 Solved: 62[Submit][Status][Discuss] Description ...
- BZOJ4710 JSOI2011分特产(容斥原理+组合数学)
显然可以容斥去掉每人都不为空的限制.每种物品分配方式独立,各自算一个可重组合乘起来即可. #include<iostream> #include<cstdio> #includ ...
- 2019.02.09 bzoj4710: [Jsoi2011]分特产(容斥原理)
传送门 题意简述:有nnn个人,mmm种物品,给出每种物品的数量aia_iai,问每个人至少分得一个物品的方案数(n,m,每种物品数≤1000n,m,每种物品数\le1000n,m,每种物品数≤10 ...
- bzoj千题计划273:bzoj4710: [Jsoi2011]分特产
http://www.lydsy.com/JudgeOnline/problem.php?id=4710 答案=总方案数-不合法方案数 f[i][j] 前i种特产分给j个人(可能有人没有分到特产)的总 ...
随机推荐
- 解决C#中FileSystemWatcher类的Changed事件触发多次的问题
public static void WatchFile() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = ...
- MacBook Air 装win10系统 by DODUI
为了给齐哥更完美的体验Windows10系统,DODUI亲手操刀MacBook双系统安装Win10,双系统安装教程如下: 终于遇到各种奇葩问题,给小伙伴分享一下. 双系统安装Win10准备工具: 1. ...
- [JAVA] TicTacToe实现Socket通信(一)
先来两张预览,大家可以试试jar包了,有什么问题评论哈,过两天贴代码 jar包这里下载 https://github.com/Andy-ZYA/TicTacToe_JAVA_Socket_Swing
- .net经典书籍
C#敏捷开发实践 C#从现象到本质 NET开发经典名著:Visual Studio 2017高级编程(第7版) 代码大全(第2版) C#高级编程(第10版 C#6&.NET Core1.0)/ ...
- fiddler修改Requests之前的数据和response 之后的数据
1. 开启抓包 file--->capture traffic 2. 在页面底部黑框输入bpu http://www.runoob.com/?s=mysql 3. 在浏览器URL输入http:/ ...
- transform:translate(-50%,-50%)实现水平垂直居中
.content { padding:10px; background:green; color:#fff; position:absolute; top:50%; ...
- spring mvc 总结
依赖包 <!-- spring依赖 --> <dependency> <groupId>org.springframework</groupId> &l ...
- 必备Linux命令和C语言基础
每一个学习嵌入式单片机的伙伴我相信对于这两个都不陌生,这毕竟是嵌入式单片机的生存之道 所有基础还是要打牢的 有句老话说的好基础不牢地动山摇 下面看下系统的资料吧 希望能对大家有所帮 ...
- oo第二次总结
第五次作业 度量分析 因为第五次作业是在第三次作业的基础上改的,所以出现了与第三次作业一样的问题,即圈复杂度超标和嵌套现象严重.同时,由于对多线程的不熟悉,将一些功能集中的放入了一个类里,这也是McC ...
- js canvas获取图片base64 dataUrl
function getImgBase64(path, callback) { var img = new Image(); img.src = path; //图片加载完成后触发 img.onloa ...