题面

解析

step 1

我们先考虑下有人没有的情况吧,

那对于每个特产就是放隔板的情况了,

设\(a[i]\)为第\(i\)个特产的个数,

那么第\(i\)个特产的方案数就是\(C_{a[i]+n-1}^{n-1}\),(这个不解释了吧)

然后再根据乘法原理乘起来就行了:\(\prod_{i=1}^mC_{a[i]+n-1}^{n-1}\).

step 2

但是要求每个人都要分到啊.

而上面的式子是包含了有人没有的情况的.

所以我们容斥一下就好了.

设\(f[k]\)表示至少有\(k\)个人没有分到(也就是钦定\(k\)个人没有),

那么方案数就是\(f[k]=\prod_{i=1}^mC_{a[i]+n-k-1}^{n-k-1}\).

最后来一个容斥:\(ans=\sum_{k=0}^{n-1}(-1)^kC_n^kf[k]\),

组合数是因为可以任意钦定\(k\)个人没有.

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std; inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
} const int N=2001;
const int Mod=1000000007;
int n,m,a[N];
ll c[N][N];
ll f[N],ans; int main(){
n=read();m=read();
for(int i=0;i<N;i++) c[i][0]=1;
for(int i=1;i<N;i++)
for(int j=1;j<N;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%Mod;
for(int i=1;i<=m;i++) a[i]=read();
for(int i=0;i<=n;i++) f[i]=1;
for(int i=0;i<n;i++)
for(int j=1;j<=m;j++) f[i]=(f[i]*c[a[j]+n-i-1][n-i-1])%Mod;
for(int i=0;i<n;i++) ans=(ans+c[n][i]*f[i]%Mod*((i&1)? -1:1))%Mod;
printf("%lld\n",(ans+Mod)%Mod);
return 0;
}

题解 [BZOJ4710] 分特产的更多相关文章

  1. 题解-JSOI2011 分特产

    题面 JSOI2011 分特产 有 \(n\) 个不同的盒子和 \(m\) 种不同的球,第 \(i\) 种球有 \(a_i\) 个,用光所有球,求使每个盒子不空的方案数. 数据范围:\(1\le n, ...

  2. Bzoj4710 分特产(容斥原理+组合数)

    题面 Bzoj 题解 考虑容斥原理,所有人都有特产的方案数等于: 至少零个人没有特产\(-\)至少一个人没有特产\(+\)至少两个人有特产\(-...\) 接着考虑其中一种情况怎么求(假设现在至少有\ ...

  3. BZOJ4710 分特产

    题目链接:戳我 容斥题. 设\(f[i]\)表示至多有i个人能够分到(也就是至少n-i个人分不到)的方案数 \(f[i]=\prod_{j=1}^mC_{a[j]+i-1}^i-1\) a[j]表示的 ...

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

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

  5. 【BZOJ4710】[Jsoi2011]分特产 组合数+容斥

    [BZOJ4710][Jsoi2011]分特产 Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同 ...

  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]分特产(组合数+容斥原理)

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

  9. ●BZOJ 4710 [Jsoi2011]分特产

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

随机推荐

  1. IDEA操作之test case coverage的方法

    作用:  用于自动化测试,检查单元测试的覆盖率情况. 安装: 1.点击 Run * with coverage 或者右键已经定义为test source的package选择(单个test class同 ...

  2. Python基础总结之第六天开始【先简单认识一次函数】(新手可相互督促)

    午休后,看看电视,在回顾下新的知识----函数.相信很多小伙伴在学习python后 ,学到函数就会有一部分人放弃了,从努力到放弃(内容过于真实) 好希望我也能有很多粉丝,hhh.... 函数: 什么是 ...

  3. SWATS算法剖析(自动切换adam与sgd)

    SWATS算法剖析(自动切换adam与sgd) 战歌指挥官 搬砖.码砖.代查水表.... 27 人赞同了该文章 SWATS是ICLR在2018的高分论文,提出的一种自动由Adam切换为SGD而实现更好 ...

  4. Java写学生管理系统

    package Homework08;/*调试了一上午,收获:学会了昨天的debug的使用吸取教训:Student stus[]=new Student[2]; for (int i=0;i<s ...

  5. 缩放动画(ScaleTransform)

    在Silverlight的动画框架中,ScaleTransform类提供了在二维空间中的坐标内进行缩放操作,通过ScaleTransform可以在水平或垂直方向的缩放和拉伸对象,以实现一个简单的缩放动 ...

  6. .NET 使用事物调用存储过程

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  7. mysql authentication plugin 'caching_sha2_password'

    解决办法: ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root1';

  8. 较新版FlowPortal BPM不能回车登录

    在BPM安装目录中找到路径:WEB\YZSoft\Login\2018\js\login.js 加回车登录代码如下 //回车登录 $('.yz-input.yzglyph.uid').bind('ke ...

  9. CHD-5.3.6集群上hive安装

    解压过后: [hadoop@master CDH5.3.6]$ ls -rlttotal 8drwxr-xr-x. 17 hadoop hadoop 4096 Jun  2 16:07 hadoop- ...

  10. MYSQL 遇见各种有意思题库

    1 使用sql查询每个学生a_id最常借图书类型u_id.表名:t1 (学生图书借阅) [问题分析,1 先选出每个学生,每个类型所借数量] SELECT a_id,u_id,count(u_id) a ...