4710: [Jsoi2011]分特产

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 814  Solved: 527
[Submit][Status][Discuss]

Description

JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们。
JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望任
何一个同学因为没有拿到特产而感到失落,所以每个同学都必须至少分得一个特产。
例如,JYY 带来了2 袋麻花和1 袋包子,分给A 和B 两位同学,那么共有4 种不同的
分配方法:
A:麻花,B:麻花、包子
A:麻花、麻花,B:包子
A:包子,B:麻花、麻花
A:麻花、包子,B:麻花

Input

输入数据第一行是同学的数量N 和特产的数量M。
第二行包含M 个整数,表示每一种特产的数量。
N, M 不超过1000,每一种特产的数量不超过1000

Output

输出一行,不同分配方案的总数。由于输出结果可能非常巨大,你只需要输出最终结果
MOD 1,000,000,007 的数值就可以了。

Sample Input

5 4
1 3 3 5

Sample Output

384835

如果不保证每个同学都分到特产,那就比较好算

对于每种特产的数量$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]分特产(容斥)的更多相关文章

  1. BZOJ4710 [Jsoi2011]分特产 容斥

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4710 题解 本来想去找一个二项式反演的题的,结果被 https://www.cnblogs.c ...

  2. BZOJ 4710: [Jsoi2011]分特产(容斥)

    传送门 解题思路 首先所有物品是一定要用完的,那么可以按照物品考虑,就是把每种物品分给\(n\)个人,每个人分得非负整数,可以用隔板法计算.设物品有\(m\)个,方案数为\(C(n+m-1,n-1)\ ...

  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: 395  Solved: 262[Submit][Status] ...

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

    Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...

  6. Bzoj4710 [Jsoi2011]分特产

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 96  Solved: 62[Submit][Status][Discuss] Description ...

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

    显然可以容斥去掉每人都不为空的限制.每种物品分配方式独立,各自算一个可重组合乘起来即可. #include<iostream> #include<cstdio> #includ ...

  8. 2019.02.09 bzoj4710: [Jsoi2011]分特产(容斥原理)

    传送门 题意简述:有nnn个人,mmm种物品,给出每种物品的数量aia_iai​,问每个人至少分得一个物品的方案数(n,m,每种物品数≤1000n,m,每种物品数\le1000n,m,每种物品数≤10 ...

  9. bzoj千题计划273:bzoj4710: [Jsoi2011]分特产

    http://www.lydsy.com/JudgeOnline/problem.php?id=4710 答案=总方案数-不合法方案数 f[i][j] 前i种特产分给j个人(可能有人没有分到特产)的总 ...

随机推荐

  1. 解决C#中FileSystemWatcher类的Changed事件触发多次的问题

    public static void WatchFile() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = ...

  2. MacBook Air 装win10系统 by DODUI

    为了给齐哥更完美的体验Windows10系统,DODUI亲手操刀MacBook双系统安装Win10,双系统安装教程如下: 终于遇到各种奇葩问题,给小伙伴分享一下. 双系统安装Win10准备工具: 1. ...

  3. [JAVA] TicTacToe实现Socket通信(一)

    先来两张预览,大家可以试试jar包了,有什么问题评论哈,过两天贴代码 jar包这里下载 https://github.com/Andy-ZYA/TicTacToe_JAVA_Socket_Swing

  4. .net经典书籍

    C#敏捷开发实践 C#从现象到本质 NET开发经典名著:Visual Studio 2017高级编程(第7版) 代码大全(第2版) C#高级编程(第10版 C#6&.NET Core1.0)/ ...

  5. fiddler修改Requests之前的数据和response 之后的数据

    1. 开启抓包 file--->capture traffic 2. 在页面底部黑框输入bpu http://www.runoob.com/?s=mysql 3. 在浏览器URL输入http:/ ...

  6. transform:translate(-50%,-50%)实现水平垂直居中

    .content {    padding:10px;    background:green;    color:#fff;    position:absolute;    top:50%;    ...

  7. spring mvc 总结

    依赖包 <!-- spring依赖 --> <dependency> <groupId>org.springframework</groupId> &l ...

  8. 必备Linux命令和C语言基础

    每一个学习嵌入式单片机的伙伴我相信对于这两个都不陌生,这毕竟是嵌入式单片机的生存之道    所有基础还是要打牢的   有句老话说的好基础不牢地动山摇    下面看下系统的资料吧   希望能对大家有所帮 ...

  9. oo第二次总结

    第五次作业 度量分析 因为第五次作业是在第三次作业的基础上改的,所以出现了与第三次作业一样的问题,即圈复杂度超标和嵌套现象严重.同时,由于对多线程的不熟悉,将一些功能集中的放入了一个类里,这也是McC ...

  10. js canvas获取图片base64 dataUrl

    function getImgBase64(path, callback) { var img = new Image(); img.src = path; //图片加载完成后触发 img.onloa ...