【BZOJ4710】[Jsoi2011]分特产 组合数+容斥
【BZOJ4710】[Jsoi2011]分特产
Description
Input
Output
Sample Input
1 3 3 5
Sample Output
题解:组合数还是不够熟练啊~
显然要容斥,设f[i]表示将所有物品都只分给i个人(不一定全都分到)的方案数,那么分开考虑每个物品,如果物品j的数量为v,那么方案数等价于将v个物品分成i个子集的方案数,即f[i]*=C(v+i-1,i-1)。
求出了f数组,考虑容斥,ans=至少0人未分到-至少1人未分到+至少2人未分到...
于是枚举有k个人未分到,ans+=(-1)^k*C(n,k)*f[n-k]。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000007;
const int maxn=1000010;
int n,m,tot;
ll ans;
ll jc[maxn],jcc[maxn],ine[maxn],f[maxn];
int v[maxn];
ll c(int a,int b)
{
return jc[a]*jcc[b]%P*jcc[a-b]%P;
}
ll pm(ll x,ll y)
{
ll z=1;
while(y)
{
if(y&1) z=z*x%P;
x=x*x%P,y>>=1;
}
return z;
}
int main()
{
scanf("%d%d",&n,&m);
int i,j;
for(i=1;i<=m;i++) scanf("%d",&v[i]),tot+=v[i];
if(n>tot)
{
printf("0");
return 0;
}
ine[1]=ine[0]=jc[1]=jc[0]=jcc[1]=jcc[0]=1;
for(i=2;i<=tot;i++) ine[i]=(P-(P/i)*ine[P%i])%P,jc[i]=jc[i-1]*i%P,jcc[i]=jcc[i-1]*ine[i]%P;
for(i=1;i<=n;i++) f[i]=1;
for(i=1;i<=m;i++) for(j=1;j<=n;j++) f[j]=f[j]*c(v[i]+j-1,j-1)%P;
for(i=0;i<n;i++) ans=(ans+((i&1)?-1:1)*c(n,i)%P*f[n-i]%P+P)%P;
printf("%lld\n",ans%P);
return 0;
}//2 2 1 2
【BZOJ4710】[Jsoi2011]分特产 组合数+容斥的更多相关文章
- 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]分特产(容斥)
[BZOJ4710]分特产(容斥) 题面 BZOJ 题解 比较简单吧... 设\(f[i]\)表示至多有\(i\)个人拿到东西的方案数. \(f[i]=\prod_{j=1}^m C_{m+i-1}^ ...
- [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 262[Submit][Status] ...
- luogu 5505 [JSOI2011]分特产 广义容斥
共有 $m$ 种物品,每个物品 $a[i]$ 个,分给 $n$ 个人,每个人至少要拿到一件,求方案数. 令 $f[i]$ 表示钦定 $i$ 个没分到特产,其余 $(n-i)$ 个人随便选的方案数,$g ...
- Bzoj4710 [Jsoi2011]分特产
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 96 Solved: 62[Submit][Status][Discuss] Description ...
- BZOJ4710: [Jsoi2011]分特产【组合数学+容斥】
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- BZOJ4710 [Jsoi2011]分特产 容斥
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4710 题解 本来想去找一个二项式反演的题的,结果被 https://www.cnblogs.c ...
- 2019.02.09 bzoj4710: [Jsoi2011]分特产(容斥原理)
传送门 题意简述:有nnn个人,mmm种物品,给出每种物品的数量aia_iai,问每个人至少分得一个物品的方案数(n,m,每种物品数≤1000n,m,每种物品数\le1000n,m,每种物品数≤10 ...
随机推荐
- LeetCode OJ--Anagrams **
https://oj.leetcode.com/problems/anagrams/ 在一个vector<string>中,找到所有经过顺序变换,可以变成一样的 string. 首先,对每 ...
- jquery -----简单分页
<!DOCTYPE html> <head> <title>无标题页</title> <script src="javsscript/j ...
- 根据CPU核数合理设置线程池大小
一般来说池中总线程数是核心池线程数量两倍,只要确保当核心池有线程停止时,核心池外能有线程进入核心池即可. 我们所需要关心的主要是核心池线程的数量该如何设置. 自定义线程池代码 package com. ...
- Java中Properties配置文件读取
以下实践的是Properties配置文件的基本操作方法.像spring使用xml做依赖注入时,这个配置文件起到非常实用的作用. 一.格式规范 参考wiki百科的格式简介:https://zh.wiki ...
- asp.net获取请求的协议头是否启动了SSL(Https)
方法: HttpContext.Current.Request.IsSecureConnection SLL:True HttpContext.Current.Request.Url.ToString ...
- Fresco的使用及注意事项
Fresco的使用及注意事项 时间 2016-10-17 18:32:12 DevWiki's Blog 原文 http://blog.devwiki.net/index.php/2016/10/1 ...
- FTP经典常用命令
FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令. 熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍 ...
- #pragma预处理命令【转】
原文 : http://www.cnblogs.com/qinfengxiaoyue/archive/2012/06/05/2535524.html #pragma可以说是C++中最复杂的预处理指令了 ...
- 【音乐App】—— Vue-music 项目学习笔记:项目准备
前言: 学习慕课网Vue高级实战课程后,在实践中总结一些这个项目带给自己的收获,希望可以再次巩固关于Vue开发的知识.这一篇主要梳理:项目概况.项目准备.页面骨架搭建.项目github地址:https ...
- Win10蓝屏代码
UNEXPECTED_STORE_EXCEPTION “意外存储异常”是Windows 10上的“停止错误”,表示存储组件发生意外异常. 原因 固态硬盘驱动与当前固态硬盘驱动程序不兼容或是当前固态硬盘 ...