有 $n$ 个人,$m$ 种物品,每种物品有 $a_i$ 个,求每个人至少分到一个的方案数

$n,m,a_i \leq 2000$

sol:

比上一个题简单一点

还是考虑容斥

每个人至少分到一个 = 随便选 - 至少 1 个人没分到 + 至少 2 个人没分到 - 至少 3 个人没分到 + ...

至少 $i$ 个人没分到就是选出 $i$ 个人分不到,然后对于每种物品,要把它分给剩下的 $(n-i)$ 个人,注意到物品间是相同的,人是不同的,插板就可以了

最后答案是 $\sum\limits_{i=1}^n (-1)^i \times C_{n}^i \times \prod\limits_{j=1}^m C_{a_j+n-i-1}^{n-i-1}$

#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline int read()
{
int x = ,f = ;char ch = getchar();
for(;!isdigit(ch);ch = getchar())if(ch == '-') f = -f;
for(;isdigit(ch);ch = getchar())x = * x + ch - '';
return x * f;
}
const int mod = ,maxn = + ;
int n,m,a[maxn];
int fac[maxn],ifac[maxn];
inline int ksm(int x,int t)
{
int res = ;
while(t)
{
if(t & )res = 1LL * res * x % mod;
x = 1LL * x * x % mod;
t = t >> ;
}return res;
}
inline int C(int n,int m)
{
if(n < || m < || n < m)return ;
return (((1LL * ifac[m] * ifac[n - m]) % mod) * fac[n]) % mod;
}
int main()
{
ifac[] = fac[] = ;for(int i=;i<=maxn-;i++)fac[i] = (1LL * fac[i - ] * i) % mod;
ifac[maxn - ] = ksm(fac[maxn - ],mod - );for(int i=maxn-;~i;i--)ifac[i] = (1LL * ifac[i + ] * (i + )) % mod;
//cout<<1LL * ifac[6] * fac[6]<<endl;
n = read(),m = read();
for(int i=;i<=m;i++)a[i] = read();
int ans = ;
for(int i=;i<n;i++)
{
int tmp = C(n,i);
for(int j=;j<=m;j++)
tmp = 1LL * tmp * C(n - i - + a[j],a[j]) % mod;
//cout<<tmp<<endl;
(ans += ((i & ) ? - : ) * tmp) %= mod;
}
ans = (ans + mod) % mod;
cout<<ans<<endl;
}

bzoj 4710 分特产的更多相关文章

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

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

  2. ●BZOJ 4710 [Jsoi2011]分特产

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

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

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

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

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

  5. 4710: [Jsoi2011]分特产

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

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

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

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

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

  8. 【BZOJ4710】[JSOI2011]分特产(容斥)

    [BZOJ4710]分特产(容斥) 题面 BZOJ 题解 比较简单吧... 设\(f[i]\)表示至多有\(i\)个人拿到东西的方案数. \(f[i]=\prod_{j=1}^m C_{m+i-1}^ ...

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

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

随机推荐

  1. django-admin引用百度地图

    实现的功能有,某个地点对应的经纬度自动填上,如果有经纬度的话,自动显示对应经纬度的地点,密匙在去百度地图引用搜索 <script type="text/javascript" ...

  2. Django为什么要跳转到不同的页面来实现不同的功能

    其实是不同将信息提交给不同的页面交给不同的页面去处理同一个数据库,不同的模块实现不同的功能,当要实现某一个功能的时候直接跳转到那一个功能下面的url,可以把要实现的功能区分开,以python面向对象的 ...

  3. Java转C#,非常不错(转)

    http://www.cnblogs.com/cnwebman/archive/2012/07/21/2602436.html 最近正在研究将一个纯java工程如何转换成C#工程,代码量还比较大,于是 ...

  4. JavaWeb:JSP标准标签库

    JavaWeb:JSP标准标签库 说明 什么是JSTL? JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制的标签库的集合,用来解决像遍 ...

  5. 流量分析系统----实现-echarts模拟迁移(bmap.js/china.js)

    china.js: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  6. Apache NiFi 开发 安装说明

    系统环境: vmware安装的centos6.7虚拟机 jdk1.8版本 maven库3.3.9版本(在使用源码编译启动的时候需要修改配置文件与当前使用的maven版本匹配,最低使用版本好像是3.1. ...

  7. loadrunder之脚本篇——int类型和字符串的相互转换

    字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345");  //将字符串变为整形 lr_output_message(" ...

  8. C++学习 之pair

    Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair<int, string> a; 表示a中有两个类型,第一个元素是int型的 ...

  9. 三、golang时间、流程控、函数

    一.本篇内容 1.string和strconv使用 2.go中的时间和日期类型 3.流程控制 4.函数讲解 二.string和strconv使用 1.  string.HasPrefix(s trin ...

  10. Python的装饰器实例用法小结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...