BZOJ 4710 [Jsoi2011]分特产 解题报告

4710 [Jsoi2011]分特产

题意

给定\(n\)个集合,每个集合有相同的\(a_i\)个元素,不同的集合的元素不同。将所有的元素分给\(m\)个不同位置,要求每个位置至少有一个元素,求分配方案数。


先考虑两个简单的问题

给定\(m\)个相同元素和\(n\)个不同位置,每个位置至少分一个的方案数?

使用插板法,等价于在\(m-1\)个空挡里插\(n-1\)个元素,方案数为

\[\binom{m-1}{n-1}\]

但是这样考虑,这个题目是做不了的。

给定\(m\)个相同元素和\(n\)个不同位置,每个位置可以不分的方案数?

事实上还是插板,但可以一个位置插两个板子。

\(m\)个元素看做\(1\),把\(n-1\)个插开点看做\(0\),等价于从\(m+n-1\)个元素拿\(n-1\)个,方案数为

\[\binom{m+n-1}{n-1}\]


从问题\(2\)出发,我们就可以容斥了

把一种方案有几个位置没选作为方案的性质,我们可以计算出一个至少有几个人没选的方案集合的数量。

因为位置的计算方法是等价的,所以我们不需要枚举子集,只需要简单的按照组合数进行计算就可以了。

具体的说,我们把所有集合的元素都独立按方案二的选出来,令\(f_i\)代表至少\(i\)个位置不选择元素的方案数,则有

\[f_i=\binom{n}{i}\prod\limits_{j=1}^n \binom{a_j+n-i-1}{n-i-1}\]

则总方案是 至少\(0\)人-至少\(1\)人+...,即

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


Code:

#include <cstdio>
#define ll long long
const int N=2000;
const ll mod=1e9+7;
ll C[N+10][N+10];
void init()
{C[0][0]=1;for(int i=1;i<=N;i++){C[i][0]=1;for(int j=1;j<=i;j++)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;}
}
int n,m,a[N];ll ans;
int main()
{init();scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) scanf("%d",a+i);for(int i=0;i<n;i++){ll mu=1;for(int j=1;j<=m;j++)(mu*=C[a[j]+n-i-1][n-i-1])%=mod;(ans+=(i&1?-1ll:1ll)*C[n][i]*mu%mod)%=mod;}printf("%lld\n",(ans%mod+mod)%mod);return 0;
}

2018.10.18

转载于:https://www.cnblogs.com/butterflydew/p/9808360.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java接口调试思想

对于接口调试的理解&#xff1a;最近多次参与接口调试工作&#xff0c;一般情况都是获取对方接口文档&#xff0c;文档中有加密验证方式&#xff0c;根据加密验证方式开发&#xff0c;调用对应的接口。可以不可以简化这个流程那&#xff0c;至少减少一方的工作量。1、减少调用方…

SOA (面向服务的架构)

见&#xff1a;https://baike.baidu.com/item/SOA/2140650?fraladdin UDDI 解说参见&#xff1a;UDDI是什么 SOAP解说参见&#xff1a; SOAP:简单对象访问协议 面向服务的架构&#xff08;SOA&#xff09;是一个组件模型&#xff0c;它将应用程序的不同功能单元&#xff08;称…

mysql中count(*)和count(1)和count(column)区别

在日常的mysql使用中&#xff0c;我们经常会看到SELECT COUNT(*)、SELECT COUNT(1)等查询语句&#xff0c;他们到底有什么区别呢&#xff1f;今天我就来总结下。 我们先从函数的含义说起&#xff1a; count() 统计满足查询条件的结果集的总行数(包含null)&#xff0c;其中count…

第一天笔记

编程语言分类&#xff1a; 1. 机器语言&#xff1a;用二进制指令编程&#xff0c;本质是直接操作硬件。 优点&#xff1a;执行效率高 缺点&#xff1a;开发效率低&#xff0c;学习难度高 2.汇编语言&#xff1a;用英文标签代替二进制指令&#xff0c;本质也是直接操作硬件。…

索尼MOTO等压榨国内代工厂:员工宿舍像监狱

摘要&#xff1a;据调查报告披露&#xff0c;伟易达血汗工厂的压榨情况比起富士康、苹果等有过之而无不及&#xff0c;包括强迫工人超负荷工作、暴露于有害化学物质、住宿环境差、虐待员工、超低的工资等。如前面保罗克鲁格曼发表了《表扬廉价劳动》一文&#xff0c;N.D.克里斯…

[cerc2012][Gym100624B]20181013

转载于:https://www.cnblogs.com/KonjakJuruo/p/9809637.html

Nginx服务器证书部署-亚洲诚信

Nginx服务器证书部署发布时间&#xff1a;2018-01-17 16:15:25依赖建议l SSL卸载驱动。建议&#xff1a;openssl版本1.1.0f。l nginx版本Stable version&#xff1a;最新稳定版&#xff0c;生产环境上建议使用的版本。获取证书MPKI方式&#xff1a;1. 登录https://mpki.tru…

java transient关键字

transient是用在序列化中的。当我们序列化的过程中&#xff0c;如果我们不想序列化某个字段&#xff0c;那么我们就可以使用这个关键字&#xff0c;jvm就会在序列化的时候自动忽略这个字段的数值。 transient主要有两个用途&#xff1a; 1.保证数据的安全。在进行序列化时&…

UDDI

见&#xff1a;https://baike.baidu.com/item/UDDI/2901586?fraladdin UDDI 是一种目录服务&#xff0c;企业可以使用它对 Web services 进行注册和搜索。UDDI&#xff0c;英文为 "Universal Description, Discovery and Integration"&#xff0c;可译为“通用描述、…

腾讯手机管家筹划“出海”

摘要&#xff1a;正筹划推进旗下手机安全产品出海揽客。6月22日&#xff0c;腾讯无线安全产品部副总经理胡振东在上海表示&#xff0c;腾讯手机管家已推出了安卓国际版&#xff0c;下决心进军国际市场。 腾讯(00700.HK)正筹划推进旗下手机安全产品出海揽客。6月22日&#xff0c…

用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard

『cs231n』卷积神经网络的可视化与进一步理解 深度学习小白——卷积神经网络可视化&#xff08;二&#xff09; TensorBoard--TensorFlow可视化 原文地址&#xff1a;http://blog.csdn.net/hjimce/article/details/50544370 作者&#xff1a;hjimce 一、相关理论 本篇博文主要讲…

java线程实现及线程池的使用

Java线程实现 线程把处理器的调度和资源分配分开&#xff0c;是cpu的最小调度单位。多个线程可以共享进程的内存资源&#xff0c;又可以独立调度。java线程关键方法都是通过高效的本地方法实现的。Java线程的主要实现方式有三种&#xff1a;内核实现、用户实现、内核用户混合实…

SOAP:简单对象访问协议

见&#xff1a;https://baike.baidu.com/item/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%B1%A1%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE/3841505?fraladdin&fromid4684413&fromtitleSOAP 简单对象访问协议 SOAP&#xff08;简单对象访问协议&#xff09;一般指简单对象访问协议 …

程序调试

对拍 $ Windows $ 下的对拍程序 借助 \(Windows\) 脚本echo off :loop r.exe > input.in coronas.exe <input.in > output.a std.exe <input.in > output.b fc output.a output.b if not errorlevel 1 goto loop 一直没有找到怎样能控制对拍次数,今天终于醒悟,可…

不怕烧钱怕翻车:雷军与马化腾现场“过招”

说起微信&#xff0c;很多时尚潮人都很熟悉。这款软件可以发送语音信息、可以在有无线网络的地方免费发送、甚至只需摇一摇就能找到在你附近的用户&#xff0c;这些方便、时尚、新颖的元素使微信受到了很多用户的喜爱&#xff0c;也夺得了大量的市场。其实&#xff0c;在微信发…

php基础(一)

1、header(contentType:text/html,charset:utf-8)设置编码 2、查找字符串最后一次出现的 strrpos() 查找字符第一次出现的 strpos 3、array_sum() 返回数组值得和 4、func_num_args() 求函数参数的个数 5、func_get_args() 获取函数的所有参数 6、匿名函数 例子 $anonymityfun…

Thread.yield()和Thread.sleep(0)

关于Thread.yield()和Thread.sleep(0)的语义问题真是一个让人挠头的问题&#xff0c;翻了好多资料&#xff0c;在java6语言规范中看到了一段这样的描述&#xff1a; 重点在红框中&#xff0c;简而言之就是&#xff1a;sleep(0)和yield()的实现不需要任何可见的效果。那么在实现…

OOA:面向对象

见&#xff1a;https://baike.baidu.com/item/OOA/3659916?fraladdin OOA:面向对象&#xff1a; Object-Oriented Analysis&#xff08;面向对象分析方法&#xff09;是确定需求或者业务的角度&#xff0c;按照面向对象的思想来分析业务。例如&#xff1a;OOA只是对需求中描述…

DCT原型 ——傅里叶级数

傅里叶级数 法国数学家傅里叶发现&#xff0c;任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示&#xff08;选择正弦函数与余弦函数作为基函数是因为它们是正交的&#xff09;&#xff0c;后世称为傅里叶级数&#xff08;法语&#xff1a;srie de Fourier&#xf…

c 递归算法

#include <stdio.h>double factorial(unsigned int i) {if(i < 1){return 1;}return i * factorial(i - 1); } int main() {int i 15;printf("%d 的阶乘为 %f\n", i, factorial(i));return 0; } 转载于:https://www.cnblogs.com/sea-stream/p/9822437.htm…