BZOJ4710: [Jsoi2011]分特产 组合数学 容斥原理
- 题意:把M堆特产分给N个同学,要求每个同学至少分到一种特产,共有多少种分法?
- 把A个球分给B个人的分法种数:(插板法,假设A个球互不相同,依次插入,然后除以全排列去重)
C(A,B+A)
- 把M堆特产分给N个同学分法总数(考虑每堆特产拿出来单独分)
∏c(mi,n)
- 然后因为题目要求每个同学至少分到一种特产,所以用到容斥原理
- 每个同学至少分到一种特产分法总数 = 没有要求时的分法总数 - 至少有一个同学没有分到特产的分法总数 + 至少有两个同学没有分到特产的分法总数 ……
- 先预处理出可能用到的C(I,J)的值,然后就乱搞了
- 代码:
#include <bits/stdc++.h>
#define nmax 2200
#define mod 1000000007 using namespace std;
typedef long long ll;
int n,m,in;
ll c[nmax][nmax]={};
ll x[nmax]; //x[i]表示把这些特产只分给i个学生 void pre(){ //a^b
for (int i=; i<nmax; i++) c[i][]=;
for (int i=; i<nmax; i++) {
for (int j=; j<i; j++) c[i][j]=(c[i-][j]+c[i-][j-])%mod;
c[i][i]=;
}
} int main(){
pre();
cin>>n>>m;
for (int j=; j<=n; j++) x[j]=;
for (int i=; i<m; i++) {
scanf("%d",&in);
for (int j=; j<=n; j++) { //枚举学生
x[j]*=c[in+j-][j-];
x[j]%=mod;
}
}
for (int j=; j<=n; j++) { x[j]*=c[n][n-j]; x[j]%=mod; }
//容斥原理
ll ans=;
for (int i=n; i>=; i--) {
if( (n-i)& ) ans-=x[i]; else ans+=x[i];
ans+=mod;
ans%=mod;
}
cout<<ans<<endl;
return ;
}
BZOJ4710: [Jsoi2011]分特产 组合数学 容斥原理的更多相关文章
- BZOJ4710 JSOI2011分特产(容斥原理+组合数学)
显然可以容斥去掉每人都不为空的限制.每种物品分配方式独立,各自算一个可重组合乘起来即可. #include<iostream> #include<cstdio> #includ ...
- 2019.02.09 bzoj4710: [Jsoi2011]分特产(容斥原理)
传送门 题意简述:有nnn个人,mmm种物品,给出每种物品的数量aia_iai,问每个人至少分得一个物品的方案数(n,m,每种物品数≤1000n,m,每种物品数\le1000n,m,每种物品数≤10 ...
- [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 262[Submit][Status] ...
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 99 Solved: 65 Description JYY 带 ...
- bzoj4710 [Jsoi2011]分特产(容斥)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 814 Solved: 527[Submit][Status] ...
- bzoj4710: [Jsoi2011]分特产 组合+容斥
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 289 Solved: 198[Submit][Status] ...
- BZOJ4710: [Jsoi2011]分特产【组合数学+容斥】
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- bzoj千题计划273:bzoj4710: [Jsoi2011]分特产
http://www.lydsy.com/JudgeOnline/problem.php?id=4710 答案=总方案数-不合法方案数 f[i][j] 前i种特产分给j个人(可能有人没有分到特产)的总 ...
- Bzoj4710 [Jsoi2011]分特产
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 96 Solved: 62[Submit][Status][Discuss] Description ...
随机推荐
- Dynamics 365 marketing中添加自定义渠道磁贴
Dynamics 365 marketing中默认的渠道只有Marketing Email和Marketing Activity,想要添加其他渠道必须自定义磁贴,自定义磁贴的步骤如下: 1.创建实体 ...
- Linux动态DMA映射
1. 几种地址类型 虚拟地址 Linux内核使用的地址是虚拟地址,数据类型为void *.例如,kmalloc()和vmalloc()函数返回值就是虚拟地址. 物理地址 处理器真实地址总线上的地址,数 ...
- C#设计模式学习笔记:(5)原型模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7640873.html,记录一下学习过程以备后续查用. 一.引言 很多人说原型设计模式会节省机器内存,他们说 ...
- #《Essential C++》读书笔记# 第七章 异常处理
基础知识 异常处理机制有两个主要成分:异常的鉴定和发出,以及异常的处理方式.通常,不论是membe function和non-member function,都有可能产生异常以及处理异常.异常出现后, ...
- 常用 PostgreSQL 脚本
数据定义 数据库 -- 创建数据库 -- https://www.postgresql.org/docs/current/static/multibyte.html -- database_name, ...
- opencv —— getRotationMatrix2D、warpAffine 仿射变换实现图像旋转缩放
仿射变换的基本概念 仿射变换是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,其数学表达式形式如下: 对应的齐次坐标矩阵表示形式为: 仿射变换保持了二维图形的“平直性”(直线经仿射变换后依然 ...
- C语言 if
C语言 if C语言支持最基本的三种程序运行结构:顺序结构.选择结构.循环结构. 顺序结构:程序按顺序执行,不发生跳转. 选择结构:依据是否满足条件,有选择的执行相应功能. 循环结构:依据条件是否满足 ...
- ECMAScript基本对象——Math数学对象
1.创建 不用创建直接使用.直接Math.方法名(): 2.方法 ①random():返回0.0-1.0的随机数,左闭有开 区间有开区间和闭区间,其中又分为全开区间( ),全闭区间[ ],左开右闭区间 ...
- 886. 求组合数 II(模板)
数据范围较大, a,b都是1e5 直接根据公式预处理 1/i就是求i的逆元(逆元求法:mod为质数,逆元就是 i^(mod-2)%mod ) O(N*logN) import java.util.S ...
- script标签的async和defer
兼容性 IE对于defer一直都支持,async属性IE6-9都没有支持,IE10及以上支持 相同点与不同点 带有async或defer的script都会立刻下载并不阻塞页面解析,而且都提供一个可选的 ...