有 $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. 光标定位 + commonAncestor

    self.cmd.range.setStartBefore().collapse(true) self.cmd.select()   通过dom节点设置range的范围 <h1>conte ...

  2. margin无法居中原因

    1.要给居中的元素一个宽度,否者无效. 2.该元素一定不能浮动,否者无效. 3 在HTML中使用标签,需考虑好整体构架,否者全部元素都会居中的.

  3. 跟踪 twisted 里deferred 的Callback

    twisted 提供了 deferred 机制,而关键点就是回调.通过查看deferred 源码 (version 8.2.0)我们可以 看到 deferred的addCallback是怎么工作的,以 ...

  4. iOS 几种常用的 crash log 崩溃信息调试方法

    前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...

  5. Kafka Confluent

    今天我们要讲的大数据公司叫作Confluent,这个公司是前LinkedIn员工出来后联合创办的,而创业的基础是一款叫作Apache Kafka的开源软件. Confluen联合创始人Jun Rao即 ...

  6. linux切换用户命令

    1. 切换用户的命令为:su +username 2.从普通用户切换到root用户:sudo su 3.退回到原来的用户:exit命令或logout,或者ctrl+d 4.如果要切换到新用户的工作环境 ...

  7. $《第一行代码:Android》读书笔记——第8章 通知和手机多媒体

    本章主要介绍了通知.短信.调用摄像头和相册.播放多媒体文件等内容. (一)通知的用法 1.通知的基本用法 见如下代码(详细操作步骤在代码注释中): (1)先创建一个布局文件,其中只有一个名为“发送通知 ...

  8. Linux Shell基础 Bash常见命令 history、alias命令以及常用快捷键

    概述  shell中常见命令history 历史纪录命令:history 命令格式如下: [root@localhost ~]# history [选项] [历史命令保存文件] -c:清空历史命令: ...

  9. 如何计算android设备的屏幕物理尺寸

    https://segmentfault.com/q/1010000002794179 通过android提供的接口,我们可以获取到如下的信息:int densityDpi = mContext.ge ...

  10. 线性代数:Ax=b的解

    n列的矩阵A,当且仅当向量b是列空间C(A)的一个向量时,Ax=b有解. C(A)的零空间是N(A),N(A)正交补是A的行空间C(T(A)), 依据上一章的结论,任何Rn向量可以表示为r+n,其中n ...