[UOJ449][概率DP]集训队作业2018:喂鸽子
UOJ449
(传说中的n2kn^2kn2k做法)
首先强制鸽子饱的顺序为1−n1-n1−n,最后答案乘n!n!n!即可
我们只需要考虑喂一次喂到了未饱的鸽子的情况,我们称之为有效喂食
下一次喂食为有效喂食的概率为n−xn\frac{n-x}{n}nn−x,其中x为已经饱了的鸽子数
所以两次有效喂食之间的无效喂食次数的期望为nn−x\frac{n}{n-x}n−xn
这样我们就消除了无效喂食的影响了
设g[i][j]g[i][j]g[i][j]表示已经进行了iii次有效喂食,jjj只鸽子已经饱了的概率,f[i][j]f[i][j]f[i][j]表示期望
转移有两种情况:
1.下一次喂食没有喂饱一只鸽子,这时概率就直接乘上1n−x\frac{1}{n-x}n−x1,期望加上当前概率乘上无效喂食次数的期望
2.下一次喂食喂饱了一只鸽子,这时我们要从喂饱上一个鸽子之后的所有有效喂食中选出k-1个出来作为喂这只将要饱的鸽子的喂食,即Ci−j∗kk−1C_{i-j*k}^{k-1}Ci−j∗kk−1,转移的时候就用情况1的转移乘上这个系数即可
Code:
#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
inline int read(){int res=0,f=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getchar();}while(isdigit(ch)) {res=(res<<1)+(res<<3)+(ch^48);ch=getchar();}return res*f;
}
const int N=105,K=5005;
inline int add(int x,int y){x+=y;if(x>=mod) x-=mod;return x;}
inline int dec(int x,int y){x-=y;if(x<0) x+=mod;return x;}
inline int mul(int x,int y){return 1ll*x*y%mod;}
inline void inc(int &x,int y){x+=y;if(x>=mod) x-=mod;}
inline void Dec(int &x,int y){x-=y;if(x<0) x+=mod;}
inline void Mul(int &x,int y){x=1ll*x*y%mod;}
inline int ksm(int a,int b){int res=1;for(;b;b>>=1,a=mul(a,a)) if(b&1) res=mul(res,a);return res;}
int fac[N*K],ifac[N*K];
int inv[N],p[N],e[N];
inline void init(int n,int k){fac[0]=fac[1]=ifac[0]=ifac[1]=1;for(int i=2;i<=n*k;i++) fac[i]=mul(fac[i-1],i);ifac[n*k]=ksm(fac[n*k],mod-2);for(int i=n*k-1;i;i--) ifac[i]=mul(ifac[i+1],i+1);inv[1]=1;for(int i=2;i<=n;i++) inv[i]=mul((mod-mod/i),inv[mod%i]);for(int i=0;i<=n;i++) p[i]=inv[n-i],e[i]=mul(n,inv[n-i]);
}
inline int C(int n,int m){if(n<0 || m<0 || n<m) return 0;return mul(fac[n],mul(ifac[m],ifac[n-m]));}
int f[N*K][N],g[N*K][N];
int main(){int n=read(),k=read();init(n,k);f[0][0]=0,g[0][0]=1;for(int i=0;i<=n*k;i++)for(int j=0;j<=i/k;j++) if(g[i][j]){int P=mul(g[i][j],p[j]),E=add(mul(P,e[j]),mul(p[j],f[i][j])),Com=C(i-j*k,k-1);inc(f[i+1][j],E);inc(g[i+1][j],P);inc(f[i+1][j+1],mul(E,Com));inc(g[i+1][j+1],mul(P,Com));}cout<<mul(f[n*k][n],fac[n]);return 0;
}
[UOJ449][概率DP]集训队作业2018:喂鸽子相关推荐
- UOJ#449. 【集训队作业2018】喂鸽子
#449. [集训队作业2018]喂鸽子 DP好题 法一:min-max容斥 处理前m个,最快吃饱的鸽子期望的时间 根据期望的定义 考虑每个方案数的概率*期望次数 枚举前m个用了x个,概率都是(1/m ...
- 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)
[UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...
- uoj#422. 【集训队作业2018】小Z的礼物
uoj#422. [集训队作业2018]小Z的礼物 题目描述 Solution 所有礼物全部取到的方案数并不好求,因此我们考虑min−maxmin-maxmin−max容斥,转化为第一次取到集合中某一 ...
- UOJ#418. 【集训队作业2018】三角形
#418. [集训队作业2018]三角形 和三角形没有关系 只要知道儿子放置的顺序,就可以直接模拟了 记录历史最大值 用一个pair(a,b):之后加上a个,期间最大值为增加b个 合并? A1+A2= ...
- 【集训队作业2018】喂鸽子
我的计数还是太差了-- 这道题现在知道三种做法. 1. 直接DP 首先显然需要min-max容斥(不知道请百度),不然很难算. 显然对于大小相同的集合答案一样,问题转化为求 \(f_c\) 即 \(c ...
- UOJ#449. 【集训队作业2018】喂鸽子 min-max容斥,FFT
原文链接www.cnblogs.com/zhouzhendong/p/UOJ449.html 题解 设 f(i) 表示给 i 只鸽子喂食使得至少一只鸽子被喂饱的期望次数,先 min-max容斥 一下. ...
- [集训队作业2018]小Z的礼物(min-max容斥,插头dp)
传送门 这种求 "取到所有物品的期望时间" 的题一般都用 min−maxmin-maxmin−max容斥 解决: 设t(i,j)t(i,j)t(i,j)为取到格子(i,j)(i,j ...
- 【集训队作业2018】复读机
即使是一道菜题,也掩盖不了窝生成函数弱的事实. 窝看到题目只想到了DP,还是生成函数不够熟.然后直到神仙WWJ提醒我用生成函数-- 首先是排列,那就可以写成指数型生成函数的优美形式.直接表示成exp吧 ...
- 【集训队作业2018】围绕着我们的圆环
我貌似开始爆OJ了 主要是因为预处理的范围写小,以及第一次写带删除线性基,然后就调了好久/cy 如果把 \(A\) 看做一堆列向量,然后对于 \(C\) 的一个列向量 \(V\) ,以及对应列的 \( ...
- [集训队作业2018] count(笛卡尔树,生成函数,卡特兰数)
传送门 什么情况下两序列同构 对于两序列A[1,n],B[1,n]A[1,n],B[1,n]A[1,n],B[1,n],设fA(1,n)=pa,fB(1,n)=pbf_A(1,n)=p_a,f_B(1 ...
最新文章
- 个人使用OKR目标管理工具的感悟
- httpclient工具使用(org.apache.httpcomponents.httpclient)
- Oracle 11g 预定义账户和PLSQL工具、企业管理器的初步使用
- 《计算机网络》谢希仁第五版考试重点整理
- Java中的双重检查锁定
- Windows系统下,好用的录屏软件工具/屏幕录制工具
- 阿里云更新ESC镜像
- antd中tooltip换行_ant design 中实现表格头部可删除和添加
- var radioname = new array();_兰帕德:引进VAR是为了回放关键时刻的情况,他们的行为令我困惑...
- 京东面试官:SQL 语句中 left join 后用 on 还是 where,区别大了!
- 从零基础入门Tensorflow2.0 ----三、9.tf.function
- 【总结】6种机器学习中的优化算法:SGD,牛顿法,SGD-M,AdaGrad,AdaDelta,Adam
- lvds输入悬空_LVDS原理及应用
- 微信小程序打印实时日志
- 删除安卓7.1源码中自带的Japanese IME输入法
- Spring的初体验-1
- Nginx安装及简介
- Aria2使用详细教程
- 计算机开机自动进入bios,电脑开机自动进入bios界面的原因及解决办法
- excel文件不能编辑怎么回事?
热门文章
- gazebo中计算理想相机模型的fx fy
- Owin Katana 的底层源码分析
- LIME-AI可解释模型:《“Why Should I Trust You?” Explaining the Predictions of Any Classifier》论文笔记
- 生鲜行业采购管理系统把控采购成本,实现精细化管理
- 100 个网络基础知识普及,看完成半个网络高手!
- python 函数基础
- 使用ffmpeg将视频转成HLS(m3u8)格式
- Unity Android Ios 微信SDK 接入
- 2015年讲师评选正式开始,培训行业讲师年终总结啦!!
- linux———/bin/sh、 /bin/bash、 /bin/dash的区别