题目

容斥加组合计数

显然答案是

\[\sum_{i=0}^n(-1)^i\binom{n}{i}f_{n-i}
\]

\(f_i\)表示至多有\(i\)个人没有拿到特产

考虑求\(f\)

发现\(m\)种特产每一种是独立的,于是可以考虑对每一种特产分别计算

现在的问题转化成了把\(a_i\)个物品分给\(i\)个人,允许有人没有分到

显然组合数插板

\[f_j=\prod_{i=1}^m\binom{a_i+j-1}{j-1}
\]

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=2e3+1;
const int mod=1e9+7;
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
inline LL ksm(LL a,int b) {
LL S=1;
while(b) {if(b&1) S=S*a%mod;b>>=1;a=a*a%mod;}
return S;
}
int n,m;
LL f[maxn],fac[maxn],inv[maxn];
inline LL C(int n,int m) {
if(m>n) return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main() {
n=read(),m=read();
fac[0]=1;
for(re int i=1;i<maxn;i++) fac[i]=(1ll*fac[i-1]*i)%mod;
inv[maxn-1]=ksm(fac[maxn-1],mod-2);
for(re int i=maxn-2;i>=0;--i) inv[i]=(1ll*inv[i+1]*(i+1))%mod;
for(re int i=1;i<=n;i++) f[i]=1;
for(re int i=1;i<=m;i++) {
int x=read();
for(re int j=1;j<=n;j++)
f[j]=1ll*f[j]*C(x-1+j,j-1)%mod;
}
LL ans=0;
for(re int i=0;i<=n;i++) {
if(i&1) ans=(ans-f[n-i]*C(n,i)%mod+mod)%mod;
else ans=(ans+f[n-i]*C(n,i)%mod)%mod;
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. EF 在controller 带参数跳转到新的网址
  2. c++0x新特性实例(比较常用的)
  3. 记录一下bing的图片 - 升级版冰糖葫芦
  4. OSFM Tables
  5. Logback相关知识汇总
  6. 基于visual Studio2013解决C语言竞赛题之1083人机博弈
  7. 程序员面试必备-链表各种操作及其实现方法(c实现)
  8. 4.1、Android Stuido配置你的Build Variant
  9. app后端设计(8)-- 数据库分表
  10. 【小白学C#】谈谈C#多播委托因异常而终止的解决方案
  11. vscode常用插件
  12. Linux 如何使用gdb 查看core堆栈信息
  13. 建议2---编写pythonic代码
  14. java-Timer类使用方法
  15. Cheerleaders UVA - 11806
  16. docker容器内外相互拷贝数据
  17. 启动 idea 编译报错 kotlin
  18. Ice简介+Qt代码示例
  19. Android IntentFilter匹配规则
  20. MVC初识

热门文章

  1. 7行代码看EntityFramework是如何运行
  2. JSTL判断list是否为空
  3. Caused by: org.hibernate.HibernateException: identifier of an instance of ... is alterde from
  4. gRPC 的route_guide例子
  5. 数学建模三剑客MSN
  6. CSS3D动画制作一个3d旋转的筛子
  7. ew代理实战
  8. 带你从零学ReactNative开发跨平台App开发(五)
  9. ExtJs 4.1.1 文件结构解析
  10. oracle截取字符串去掉字段末尾指定长度的字符