【bzoj 4710】 [Jsoi2011]分特产
2024-08-30 05:13:56
容斥加组合计数
显然答案是
\[\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;
}
最新文章
- EF 在controller 带参数跳转到新的网址
- c++0x新特性实例(比较常用的)
- 记录一下bing的图片 - 升级版冰糖葫芦
- OSFM Tables
- Logback相关知识汇总
- 基于visual Studio2013解决C语言竞赛题之1083人机博弈
- 程序员面试必备-链表各种操作及其实现方法(c实现)
- 4.1、Android Stuido配置你的Build Variant
- app后端设计(8)-- 数据库分表
- 【小白学C#】谈谈C#多播委托因异常而终止的解决方案
- vscode常用插件
- Linux 如何使用gdb 查看core堆栈信息
- 建议2---编写pythonic代码
- java-Timer类使用方法
- Cheerleaders UVA - 11806
- docker容器内外相互拷贝数据
- 启动 idea 编译报错 kotlin
- Ice简介+Qt代码示例
- Android IntentFilter匹配规则
- MVC初识
热门文章
- 7行代码看EntityFramework是如何运行
- JSTL判断list是否为空
- Caused by: org.hibernate.HibernateException: identifier of an instance of ... is alterde from
- gRPC 的route_guide例子
- 数学建模三剑客MSN
- CSS3D动画制作一个3d旋转的筛子
- ew代理实战
- 带你从零学ReactNative开发跨平台App开发(五)
- ExtJs 4.1.1 文件结构解析
- oracle截取字符串去掉字段末尾指定长度的字符