博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj4665: 小w的喜糖
阅读量:5298 次
发布时间:2019-06-14

本文共 899 字,大约阅读时间需要 2 分钟。

我有点懵逼瞎容斥就过了

首先看了下路牌就是容斥

明显位置没有用,排一波序把拿相同颜色的球的人放一起

设f[i][j]表示枚举到第i个颜色,至少j个人拿了和原来一样颜色的球

那么f[i+1][j+k]=(f[i+1][j+k]+f[i][j]*C[p[i+1]][k]%mod*C[(ls+p[i+1])-(j+k)][p[i+1]-k])%mod;

p是当前球数,ls是前面球数的和,加起来相当于当前总球数

C[p[i+1]][k]是选k个人拿和原来一样颜色的球,C[(ls+p[i+1])-(j+k)][p[i+1]-k]是在剩下的位置中把没有拿的球找个位置放好

考虑这里的容斥系数,也就是对于重复人数为d的一个方案,对f[n][k]的贡献次数

开始我想成了每个不同颜色的球的组合数加起来刚好等于k,实际上可以合并起来看,在d个球中选出k个已确定,就是C[d][k]

那么上二项式反演即可

由于C[i][0]=1,网上很多人都说系数就是1,直接+1-1...................

容斥的时候输出答案记得要(ans+mod)%mod啊,系数有-1的啊!!!!!!!!!!!!!!!!

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int _=1e2;const int maxn=2*1e3+_;const int maxm=2*1e3+_;const LL mod=1e9+9;LL C[maxn][maxn];void yu(){ C[0][0]=1; for(int i=1;i

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/10442237.html

你可能感兴趣的文章
9-----BBS论坛
查看>>
1089. Insert or Merge (25)-判断插入排序还是归并排序
查看>>
新手对web.xml的描述
查看>>
解决tomcat中jdk1.5运行日志相差8小时问题
查看>>
8086cpu中的标志寄存器与比较指令
查看>>
oj教程--排序算法(Java)
查看>>
Oracle数据库的一些简单sql问题
查看>>
Servlet中的Filter 过滤器的简单使用!
查看>>
实验2
查看>>
求解斐波那契数列模$p$意义下最短循环节
查看>>
Window7幻灯片字体显示混乱,难道真的是病毒么
查看>>
JavaScript的程序构成
查看>>
driver: Linux设备模型之input子系统具体解释
查看>>
golang基于etcd实现分布式锁(转)
查看>>
解决pod search出来的库不是最新
查看>>
钱币兑换问题(hd1284)
查看>>
1.Two Sum
查看>>
对话框
查看>>
工厂+单例模式
查看>>
javascript的类、委托、事件
查看>>