枚举几个同学分到了

对于每种特产求一个方案数(经典做法)乘起来

然后容斥

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
  4. #define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
  5. #define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
  6. #define fi first
  7. #define se second
  8. #define pb push_back
  9. #define mp make_pair
  10. #define dbg(x) cerr<<#x" = "<<x<<endl
  11. #define debug(...) fprintf(stderr, __VA_ARGS__)
  12. #define Es(x,i) for(Edge *i=G[x];i;i=i->nxt)
  13. typedef long long ll;
  14. typedef pair<int,int> pii;
  15. const int inf=~0u>>1,mod=1e9+7;
  16. inline int rd() {
  17. int x,c,f=1;while(!isdigit(c=getchar()))f=c!='-';x=c-'0';
  18. while(isdigit(c=getchar()))x=x*10+c-'0';return f?x:-x;
  19. }
  20. inline int pw(int n,int m){int r=1;for(;m;m>>=1,n=(ll)n*n%mod)if(m&1)r=(ll)r*n%mod;return r;}
  21. const int N=1011,M=2*N;
  22. int fac[M],fai[M];
  23. inline void init(){
  24. fac[0]=1;
  25. For(i,1,M)fac[i]=(ll)fac[i-1]*i%mod;
  26. fai[M-1]=pw(fac[M-1],mod-2);
  27. per(i,1,M-1)fai[i-1]=(ll)fai[i]*i%mod;
  28. }
  29. inline int C(int n,int m){return n<m?0:(ll)fac[n]*fai[m]%mod*fai[n-m]%mod;}
  30. int m,n,a[N];
  31. inline int Cal(int n){
  32. int r=1;
  33. rep(i,1,m){
  34. r=(ll)r*C(a[i]+n-1,n-1)%mod;
  35. }
  36. return r;
  37. }
  38. int main(){
  39. #ifdef flukehn
  40. freopen("test.txt","r",stdin);
  41. #endif
  42. init();
  43. //while(cin>>n>>m)cout<<C(n,m)<<endl;
  44. n=rd(),m=rd();
  45. rep(i,1,m)a[i]=rd();
  46. ll ans=Cal(n);
  47. For(i,1,n)ans+=((n-i&1)?-1:1)*(ll)Cal(i)*C(n,i)%mod;
  48. ans=(ans%mod+mod)%mod;
  49. cout<<ans<<endl;
  50. }

  

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. bzoj 4710: [Jsoi2011]分特产

    Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...

  6. 【bzoj 4710】 [Jsoi2011]分特产

    题目 容斥加组合计数 显然答案是 \[\sum_{i=0}^n(-1)^i\binom{n}{i}f_{n-i}\] \(f_i\)表示至多有\(i\)个人没有拿到特产 考虑求\(f\) 发现\(m\ ...

  7. bzoj 4710 分特产

    有 $n$ 个人,$m$ 种物品,每种物品有 $a_i$ 个,求每个人至少分到一个的方案数 $n,m,a_i \leq 2000$ sol: 比上一个题简单一点 还是考虑容斥 每个人至少分到一个 = ...

  8. BZOJ 4710 容斥原理+dp

    //By SiriusRen #include <cstdio> using namespace std; int n,m,a[1005]; typedef long long ll; l ...

  9. BZOJ 4710: [Jsoi2011]分特产(容斥)

    传送门 解题思路 首先所有物品是一定要用完的,那么可以按照物品考虑,就是把每种物品分给\(n\)个人,每个人分得非负整数,可以用隔板法计算.设物品有\(m\)个,方案数为\(C(n+m-1,n-1)\ ...

随机推荐

  1. Zabbix 添加端口监控链接

    zabbix 添加端口监控 连接数: zabbix  配置  添加 监控项: 其他检测 方式也是 示例: zabbix 客户端配置文件添加: 编辑 zabbix_agentd.conf  添加  端口 ...

  2. 《B2C商城》电商平台搭建流程分析

    商城网站建设在当今互联网时代中是非常重要的.商城网站,是企业产品展示.品牌宣传与消费者互动交流的一个平台,利用好这样的一个平台,就能占得先机.那么问题来了,商城网站如何建设呢?这对于企业来说真的是一个 ...

  3. kai linux安装搜狗输入法以及更新源地址

    需要去搜狗官网下载linux版的输入法,根据自己的系统选择多少位进行下载. 首先执行如下命令:dpkg -i 输入法包名,这时会报错,会报没有安装依赖包,这时需要执行apt-get install - ...

  4. spring基于XML的声明式事务控制

    <?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.sp ...

  5. C++自己实现一个String类

    C++自己实现一个String类(构造函数.拷贝构造函数.析构函数和字符串赋值函数) #include <iostream> #include <cstring> using ...

  6. git知识总结-2.git基本操作之操作汇总

    0.前言 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 上图分别为: Workspace:工作区 Index / Stage:暂存区 Reposito ...

  7. Linux禁止ping、开启ping设置

    Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...

  8. VMware使两台windows虚拟机能够互相ping通

    1.关闭防火墙 cmd命令行里输入:netsh firewall set opmode disable 2.测试如果还不能ping通,就把网络类型选nat类型 3.测试:vmware网关默认是.2

  9. js &运算符什么意思,什么用处

    “&&”连接两个表达式,当两侧表达式都为真时,返回TRUE.有一个为假则返回FALSE. 也就是说,符号前面的如果为true,就会执行符号后面的语句,如果符号前面的为false,那么后 ...

  10. mysql 与 oracle 的时间查询

    关于时间区间查询 1.mysql select * from t_date a where date_format (a.delete_time,'%Y-%m-%d') <date_format ...