BZOJ 4665: 小w的喜糖
Sol
DP+容斥.
这就是一个错排的扩展...可是想到容斥却仅限于种数的容斥,如果种数在一定范围内我就会做了QAQ.
但是容斥的是一定在原来位置的个数.
发现他与原来的位置无关,可以先把每个同种的糖看成本质不同的来DP.
\(f[i][j]\) 表示前 \(i\) 种糖,一定有 \(j\) 个不合法的方案数.
然后在第 \(i\) 种内枚举有几种不合法的状态.这样就可以从前 \(i-1\) 种转移了.
然后随便搞搞组合数,还有线性计算逆元,上篇随笔里提到了.
Code
/**************************************************************
Problem: 4665
User: BeiYu
Language: C++
Result: Accepted
Time:2548 ms
Memory:32720 kb
****************************************************************/ #include<cstdio>
#include<iostream>
using namespace std; const int N = 2005;
const int Mo = 1000000009;
typedef long long LL; int n,m;LL ans;
int a[N],fac[N],inv[N],C[N][N];
int f[N][N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int main(){
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout); n=in(),fac[0]=fac[1]=1,C[0][0]=1,f[0][0]=1; inv[0]=inv[1]=1;
for(int i=2;i<=n;i++) inv[i]=(LL)(Mo-Mo/i)*inv[Mo%i]%Mo,fac[i]=(LL)fac[i-1]*i%Mo;
// for(int i=1;i<=n;i++) cout<<inv[i]<<" ";cout<<endl;
for(int i=2;i<=n;i++) inv[i]=(LL)inv[i-1]*inv[i]%Mo;
for(int i=1;i<=n;i++) for(int j=0;j<=i;j++) if(!j) C[i][j]=1;else C[i][j]=(LL)(C[i-1][j-1]+C[i-1][j])%Mo; for(int i=1;i<=n;i++) a[in()]++;
for(int i=1;i<=n;i++) if(a[i]) a[++m]=a[i]; for(int i=1;i<=m;i++) for(int j=0;j<=n;j++) for(int k=0;k<=a[i]&&k<=j;k++)
f[i][j]=(LL)(f[i][j]+(LL)f[i-1][j-k]*C[a[i]][k]%Mo*fac[a[i]]%Mo*inv[a[i]-k])%Mo; for(int i=0;i<=n;i++) if(i&1) ans=(ans-(LL)f[m][i]*fac[n-i]%Mo+Mo)%Mo;else ans=(ans+(LL)f[m][i]*fac[n-i]%Mo)%Mo;
for(int i=1;i<=m;i++) ans=ans*inv[a[i]]%Mo;
cout<<ans<<endl;
// for(int i=1;i<=n;i++) for(int j=0;j<=n;j++) printf("%d%c",f[i][j]," \n"[j==n]);
return 0;
}
BZOJ 4665: 小w的喜糖的更多相关文章
- ●BZOJ 4665 小w的喜糖
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4665 题解: 容斥,dp令 v[i] 表示原来拥有i类糖果的人数. (一个套路,首先把每个糖 ...
- 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
- bzoj4665小w的喜糖 dp+容斥
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 72[Submit][Status][Discuss] ...
- bzoj4665 小w的喜糖(dp+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 222 Solved: 130[Submit][Status][Discuss ...
- [bzoj4665]小w的喜糖_二项式反演
小w的喜糖 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4665 数据范围:略. 题解: 二项式反演裸题. $f_{i,j}$表示,前$i$种钦 ...
- 【BZOJ4665】小w的喜糖 容斥+组合数
[BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...
- 小w的喜糖(candy)
小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...
- BZOJ4665: 小w的喜糖 DP
对于这道题,首先每个人的位置并不影响结果 所以我们可以将相同颜色糖果的人放在一块处理 设 $f_{i,j}$ 表示处理到第 $i$ 种糖果至少有 $j$ 人的糖果和原先的类型相同 枚举当前种类中不满足 ...
- BZOJ4665 : 小w的喜糖
考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出. 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥. ...
随机推荐
- easyUI数据表格datagrid之笔记2
/**========================================= * 追加在表格尾部 */function append(){ editIndex = $('#dg').dat ...
- kail2 linux 安装vmware tools
kali进去后,安装vmtools有点蛋疼,中途会问你要编译内核模块所需要的内核头文件,但是没有默认安装的.安装headers时又因为没有源下载不了,所以我们要做一些准备工作. 首先打开shell,我 ...
- HDFS的Java操作
实验环境: Windows 10 Eclipse Mars.2 Release (4.5.2) CentOS 7 Hadoop-2.7.3 先决条件: 1) Windows上各环境变量已配置OK. ...
- pulltorefresh滚动到底部
如果用ListView,让它滚动到顶部,一般是这样写的: if (!listView.isStackFromBottom()) { listView.setStackFromBottom(true); ...
- C#----Graphics中部分方法的使用和理解
1.DrawArc(Pen, Rectangle, Single, Single) 说明:绘制一段弧线,弧线是椭圆的一部分,椭圆是矩形Rectangle的内切椭圆. 参数:Pen是画弧线使用的画笔:R ...
- bash: ifconfig: command not found解决方法
1.问题: #ifconfig bash: ifconfig: command not found 2.原因:非root用户的path中没有/sbin/ifconfig ,其它的命令也可以出现这种情况 ...
- PostSharp AOP
使用PostSharp 在.NET 平台上实现 AOP 摘要 本文首先介绍AOP(面向方面编程)的相关概念及理论,然后介绍如何使用PostSharp框架在.NET平台上实现AOP,最后对PostS ...
- PetaPoco初体验(转)
PetaPoco初体验(转) PetaPoco初体验(转) 大部分转自: http://landyer.com/archives/138 PetaPoco C#微型ORM框架,基本无需配置,仅由单个c ...
- SSDB 数据库
SSDB数据库 SSDB是一套基于LevelDB存储引擎的非关系型数据库(NOSQL),可用于取代Redis,更适合海量数据的存储. 另外,rocksdb是FB在LevelDB的二次开发版本,因此也存 ...
- [转]Sql按年份.月份.每天统计数量
1.每年 select year(ordertime) 年, sum(Total) 合计 from 表 group by year(ordertime) 2.每月 select year(ordert ...