BZOJ 4710 [Jsoi2011]分特产 解题报告
4710 [Jsoi2011]分特产
题意
给定\(n\)个集合,每个集合有相同的\(a_i\)个元素,不同的集合的元素不同。将所有的元素分给\(m\)个不同位置,要求每个位置至少有一个元素,求分配方案数。
先考虑两个简单的问题
给定\(m\)个相同元素和\(n\)个不同位置,每个位置至少分一个的方案数?
使用插板法,等价于在\(m-1\)个空挡里插\(n-1\)个元素,方案数为
\]
但是这样考虑,这个题目是做不了的。
给定\(m\)个相同元素和\(n\)个不同位置,每个位置可以不分的方案数?
事实上还是插板,但可以一个位置插两个板子。
把\(m\)个元素看做\(1\),把\(n-1\)个插开点看做\(0\),等价于从\(m+n-1\)个元素拿\(n-1\)个,方案数为
\]
从问题\(2\)出发,我们就可以容斥了
把一种方案有几个位置没选作为方案的性质,我们可以计算出一个至少有几个人没选的方案集合的数量。
因为位置的计算方法是等价的,所以我们不需要枚举子集,只需要简单的按照组合数进行计算就可以了。
具体的说,我们把所有集合的元素都独立按方案二的选出来,令\(f_i\)代表至少\(i\)个位置不选择元素的方案数,则有
\]
则总方案是 至少\(0\)人-至少\(1\)人+...,即
\]
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
BZOJ 4710 [Jsoi2011]分特产 解题报告的更多相关文章
- BZOJ 4710: [Jsoi2011]分特产 [容斥原理]
		4710: [Jsoi2011]分特产 题意:m种物品分给n个同学,每个同学至少有一个物品,求方案数 对于每种物品是独立的,就是分成n组可以为空,然后可以用乘法原理合起来 容斥容斥 \[ 每个同学至少 ... 
- bzoj 4710: [Jsoi2011]分特产
		Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ... 
- ●BZOJ 4710 [Jsoi2011]分特产
		题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4710 题解: 容斥,组合先看看这个方案数的计算:把 M 个相同的东西分给 N 个人,每个人可 ... 
- BZOJ 4710: [Jsoi2011]分特产(容斥)
		传送门 解题思路 首先所有物品是一定要用完的,那么可以按照物品考虑,就是把每种物品分给\(n\)个人,每个人分得非负整数,可以用隔板法计算.设物品有\(m\)个,方案数为\(C(n+m-1,n-1)\ ... 
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
		4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 99 Solved: 65 Description JYY 带 ... 
- 4710: [Jsoi2011]分特产
		4710: [Jsoi2011]分特产 链接 分析: 容斥原理+隔板法. 代码: #include<cstdio> #include<algorithm> #include&l ... 
- bzoj4710: [Jsoi2011]分特产 组合+容斥
		4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 289 Solved: 198[Submit][Status] ... 
- 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: 395 Solved: 262[Submit][Status] ... 
随机推荐
- 在Liunx上搭建FTP并配置用户权限
			伴随着.Net Core的开源,公司前几天上了新的Liunx服务器,我在前几篇文章中介绍了如何搭建环境以及部署.Net Core应用. 然后,今天客户和我说想自己给网站做推广,需要用FTP链接我们的服 ... 
- 软件的按契约设计(DbC---Design by Contract)
			一.DbC基本概念 DbC的思想源于商业活动中商家和用户的行为(义务和利益关系),双方都要遵守一个契约(合同),交易才能完成. 商家与用户的契约关系如下: 1. 商家必须提供某种产品(义务),并有权获 ... 
- Python3爬虫(三)请求库的使用之urllib
			Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.urllib库: 1. 是Python内置的HTTP请求库 2. 在Python2中,由urllib和urll ... 
- HyperLedger Fabric 1.4 架构(6.2)
			6.2.1 架构演进 Fabric架构经历了0.6版本到1.0版本的演进,架构上进行了重大改进,从0.6版本的结构简单演进到可扩展.多通道的设计,在架构上有了质的飞跃:从1.0版本以后,架 ... 
- BZOJ3265: 志愿者招募加强版(线性规划)
			Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 809 Solved: 417[Submit][Status][Discuss] Descriptio ... 
- MySQL 从入门到删库
			基本操作 登陆指令 mysql -u用户名 -p密码(可以非明文输入) -h主机/IP -D端口 --prompt 提示符 修改提示符 \D 日期 \d 当前数据库 \h 服务器名 \u 用户名 // ... 
- Druid时序数据库常见问题及处理方式
			最近将Druid-0.10.0升级到Druid-0.12.1的过程中遇到一些问题,为了后期方便分析问题和及时解决问题,特此写这篇文章将工作中遇到的Druid问题及解决办法记录下来,以供其他人借鉴,其中 ... 
- mysql字符串拼接,存储过程
			添加字段: alter table `user_movement_log`Add column GatewayId int not null default 0 AFTER `Regionid` (在 ... 
- easyui 验证动态添加和删除问题
			$.extend($.fn.validatebox.methods, { remove: function(jq, newposition){ return jq.each(function(){ $ ... 
- 【jQuery】 选择器
			[jQuery] 选择器 资料: w3school http://www.w3school.com.cn/jquery/jquery_ref_selectors.asp 1. 标签选择器 : $(& ... 
