bzoj4665 小w的喜糖(dp+容斥)
4665: 小w的喜糖
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 222 Solved: 130
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
1
2
2
3
3
Sample Output
首先我们把每颗糖(第i种糖有$A_i$个)都看成不同的(也就是同种糖的排列顺序不同也算进方案)
最后再$ans/=A_i!$,这样就可以忽略同种糖的问题
一般看到这种题,都是先套路地求至少有$i$个......的方案数,再用容斥求答案。本题也是如此
我们套路地设$f[i][j]$为前$i$种糖,至少$j$个人不合法的方案数
$f[i][j]=\sum_{k=0}^{min(j,A_i)}\ f[i-1][j-k]*C(A_i,k)*A_i!/(A_i-k)!$
对于每个$f[n][i]$,剩下的$n-i$个人可以随意分糖
所以最终方案数$F[i]=f[n][i]*(n-i)!$
但是肯定有重复算的鸭
所以搞搞容斥统计下就好辣
$ans=\sum_{i=0}^n(-1)^iF[i]$
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
#define N 2005
const ll P=1e9+;
int n,A[N];
ll f[N][N],inv[N],fac[N],ifac[N],ans;
void prep(){
inv[]=; fac[]=fac[]=ifac[]=ifac[]=;
for(ll i=;i<=n;++i){
inv[i]=(P-P/i)*inv[P%i]%P;
fac[i]=fac[i-]*i%P;
ifac[i]=ifac[i-]*inv[i]%P;
}
}
inline ll C(int a,int b){return fac[a]*ifac[b]%P*ifac[a-b]%P;}
int main(){
scanf("%d",&n); prep();
for(int i=,q;i<=n;++i) scanf("%d",&q),++A[q];
f[][]=;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int k=;k<=min(j,A[i]);++k)
f[i][j]=(f[i][j]+f[i-][j-k]*C(A[i],k)%P*fac[A[i]]%P*ifac[A[i]-k]%P)%P;
for(int i=;i<=n;++i) ans=((ans+1ll*((i&)?-:)*f[n][i]*fac[n-i]%P)%P+P)%P;
for(int i=;i<=n;++i) if(A[i]>) ans=ans*ifac[A[i]]%P;
printf("%lld",ans);
return ;
}
bzoj4665 小w的喜糖(dp+容斥)的更多相关文章
- bzoj4665小w的喜糖 dp+容斥
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 72[Submit][Status][Discuss] ...
- BZOJ4665: 小w的喜糖 DP
对于这道题,首先每个人的位置并不影响结果 所以我们可以将相同颜色糖果的人放在一块处理 设 $f_{i,j}$ 表示处理到第 $i$ 种糖果至少有 $j$ 人的糖果和原先的类型相同 枚举当前种类中不满足 ...
- [bzoj4665]小w的喜糖_二项式反演
小w的喜糖 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4665 数据范围:略. 题解: 二项式反演裸题. $f_{i,j}$表示,前$i$种钦 ...
- BZOJ4665 : 小w的喜糖
考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出. 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥. ...
- 【BZOJ4665】小w的喜糖 容斥+组合数
[BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...
- 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
- BZOJ 4665: 小w的喜糖
Sol DP+容斥. 这就是一个错排的扩展...可是想到容斥却仅限于种数的容斥,如果种数在一定范围内我就会做了QAQ. 但是容斥的是一定在原来位置的个数. 发现他与原来的位置无关,可以先把每个同种的糖 ...
- bzoj 3622 DP + 容斥
LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...
- 小w的喜糖(candy)
小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...
随机推荐
- export和export default
在 vue中 export 变量名不能识别,只能export default 变量,import 随便取名,不需要{}
- jmeter使用指南:jmeter无脑式指南
一:启动jmeter 二:添加线程组 三:添加 HTTP 请求 四:添加监听器 五:填写访问的域名,并保存 六:运行,查看结果 七:配置多线程.循环机制,进行压力测试
- sysbench对MySQL的压测
QPS - query per second TPS - transaction per second 不是特别关注,每个业务场景中事务标准是不一样的 Ⅰ.sysbench测试框架 Ⅱ.常用测试脚本 ...
- nginx上通过ssl证书将http转发为https
环境:阿里云linux,ngnix 1.16.0 ,ssl证书,XXXX.jar 0.自行在阿里云上下载免费的ssl证书.里面有2个文件.key和pem后面要用到. 1.首先将项目在linux上跑起来 ...
- python之str字符串
字符串是python非常重要的数据类型,它是一个序列(列表和元组也是序列),有下标,可以通过下标遍历字符串序列:同时字符串也是一个不可变数据类型,每次使用"+"拼接字符串时都会产生 ...
- LVS,Keepalived,HAproxy区别与联系
LVS,Keepalived,HAproxy区别与联系 LVS 全称Linux Virtual Server,也就是Linux虚拟服务器,由章文嵩(现就职于于淘宝,正因为如此才出现了后来的fullna ...
- python摸爬滚打之day33----线程
1.线程 能够独立运行的基本单位. 进程: 进程是资源分配的最小单位; 每一个进程中至少有一个线程. 线程: 线程是cpu调度的最小单位. 2.创建线程(类似于创建进程) import time f ...
- 20190423 PowerDesigner 数据库模型快速建立
后面我在做一个视频的讲解记录吧! 那种讲解记录,只是为了演示按钮功能在什么地方,这个功能的作用是什么 这个软件相对比较简单的使用步骤,主要有三步 第一. 选择好你针对的数据库版本和类型创建数据库名称基 ...
- xcode10对应的xcode command line tool编译的坑
众所周知,xcode10新增的编译系统new build system会不支持一些老项目的编译,一般的做法是在Xcode编译配置Xcode->File->Project Settings/ ...
- Python加密保护-对可执行的exe进行保护
Python 是一种面向对象的解释型计算机程序设计语言,Python 语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序. 在计算机内部,Python解释器把源代码转换成称为字节的中间形式, ...