[JSOI 2011]分特产
Description
Input
Output
Sample Input
1 3 3 5
Sample Output
384835
题解
想到了隔板法,想到了容斥...就是不知道怎么写...
对于总共$n$个人,很容易想到第$i$个物品,分出的方案数为$C^{n-1} _{a[i]+n-1}$,其中$a[i]$为个数(隔板法)。
但是这样做就会导致有人分不到特产。
考虑容斥,我们-一个人分不到的情况+两个人分不到的情况-三个人...
我们直接限定隔板的数目来强制一些人分不到特产,即方案数变为$C^{n-1-i} _{a[j]+n-1-i}$,其中$i$个人强制分不到,第$j$个物品。
注意最后,因为分不到的人可以是任意的,所以每次容斥还要*$C^i _n$。
1 //It is made by Awson on 2017.9.25 2 #include <set> 3 #include <map> 4 #include <cmath> 5 #include <ctime> 6 #include <queue> 7 #include <stack> 8 #include <string> 9 #include <cstdio> 10 #include <vector> 11 #include <cstdlib> 12 #include <cstring> 13 #include <iostream> 14 #include <algorithm> 15 #define Min(a, b) ((a) < (b) ? (a) : (b)) 16 #define Max(a, b) ((a) > (b) ? (a) : (b)) 17 #define LL long long 18 using namespace std; 19 const int N = 1000; 20 const int MOD = 1000000007; 21 22 int n, m, mx; 23 int a[N+5]; 24 int C[N*2+5][N*2+5]; 25 26 void work() { 27 scanf("%d%d", &n, &m); 28 for (int i = 1; i <= m; i++) { 29 scanf("%d", &a[i]); 30 mx = Max(mx, a[i]); 31 } 32 mx += n; 33 for (int i = 0; i <= mx; i++) { 34 C[i][0] = 1; 35 for (int j = 1; j <= i; j++) 36 C[i][j] = (C[i-1][j-1]+C[i-1][j])%MOD; 37 } 38 LL ans = 0; 39 for (int i = 0; i < n; i++) { 40 LL cnt = 1; 41 for (int j = 1; j <= m; j++) 42 cnt = cnt*C[a[j]+n-1-i][n-1-i]%MOD; 43 cnt = cnt*C[n][i]%MOD; 44 if (i%2) ans = (ans+MOD-cnt)%MOD; 45 else ans = (ans+cnt)%MOD; 46 } 47 printf("%lld\n", ans); 48 } 49 int main() { 50 work(); 51 return 0; 52 }
转载于:https://www.cnblogs.com/NaVi-Awson/p/7594023.html
[JSOI 2011]分特产相关推荐
- BZOJ 4710 [Jsoi2011]分特产 解题报告
4710 [Jsoi2011]分特产 题意 给定\(n\)个集合,每个集合有相同的\(a_i\)个元素,不同的集合的元素不同.将所有的元素分给\(m\)个不同位置,要求每个位置至少有一个元素,求分配方 ...
- 【BZOJ4710】[JSOI2011]分特产(容斥)
[BZOJ4710]分特产(容斥) 题面 BZOJ 题解 比较简单吧... 设\(f[i]\)表示至多有\(i\)个人拿到东西的方案数. \(f[i]=\prod_{j=1}^m C_{m+i-1}^ ...
- JSOI2011 分特产题解
[JSOI2011]分特产 题目描述 JYY 带队参加了若干场 ACM/ICPC\text{ACM/ICPC}ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特 ...
- BZOJ 4710: [Jsoi2011]分特产
传送门 见计数想容斥 发现所有同学至少有一个特产的限制不好搞 考虑设 $F[i]$ 表示 至少 有 $i$ 个同学没有特产的方案数 那么根据容斥原理答案就是 $F[0]-F[1]+F[2]-F[3]. ...
- bzoj 4710 [Jsoi2011]分特产 组合数学+容斥原理
题面 题目传送门 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有\(x\)个物品,\(n\)个人,可以有人没有被分到,那么分给这\(n\)个人的方案数 ...
- 语法入门*算法入门题单
作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...
- 【新手上路】语法入门算法入门题单
作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...
- kinectfusion解析_2019/02/09 对于KinectFusion 的理解
网上有很多关于Kinect Fusion 的详细介绍,包括各个部分的算法,思路,以及应用上的限制和优化. 在此就不多介绍了. KinectFusion 提供了非常基础的用RGB-D 相机实现的 Den ...
- win10 linux开发环境搭建,win10子系统linux.ubuntu开发环境搭建
UI线程和work线程 UI线程处理消息,比如重绘,响应键盘鼠标等等跟消息有关的处理. 而工作线程一般是你自己写的用来处理数据的,比如操作数据库等等.(work线程) ORACLE 自定义分页存储过程 ...
最新文章
- linux systemd 服务管理脚本简介
- python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...
- 面试题37:两个链表的第一个公共结点
- Linux字符驱动程序的基本结构与函数
- SQL常用语句大全(值得收藏)
- 40种网站设计常用方法
- LS 24 Bracket sequence(DP)
- 使用 jQuery Mobile 与 HTML5 开发 Web App (八) —— jQuery Mobile 工具栏
- redis linux工具安装,linux 安装redis缓存工具
- __init__.py的作用是什么?
- 更改VMware虚拟机硬件版本
- 记一次python cpu100%分析记录
- 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YIQ颜色空间转换
- 调焦后焦实现不同距离成像_照片要清晰、对焦必须深入理解!对焦模式、对焦区域模式等对焦知识...
- 第14节 三个败家子(14)——在辉煌中走向深渊
- Python绘制气泡图
- centos7 Zookeeper集群部署
- 【MySQL】浅谈MySQL中索引的基本操作以及背后的数据结构
- Java面试题---第四阶段
- 亚马逊ERP软件贴牌OEM是什么意思有什么优势
热门文章
- 编译错误 无法打开包括文件:“SDKDDKVer.h”: No such file or directory
- nafxcw.lib与LIBCMT.lib在vs2008中链接冲突解决方案
- 13个代码注释的小贴士
- POJ 2778 DNA Sequence (AC自动机+矩阵快速幂)
- 判断能被N整除的字符串
- ksnapshot运行look up error undefined symbol错误解决方案
- 记录 之 numpy查看数据类型和类型转换
- linux java 查询mysql_Linux Java连接MySQL数据库
- 双口RAM和多模块存储器
- 数理统计-5.2 样本数据的整理和显示