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:喂鸽子相关推荐

  1. UOJ#449. 【集训队作业2018】喂鸽子

    #449. [集训队作业2018]喂鸽子 DP好题 法一:min-max容斥 处理前m个,最快吃饱的鸽子期望的时间 根据期望的定义 考虑每个方案数的概率*期望次数 枚举前m个用了x个,概率都是(1/m ...

  2. 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)

    [UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...

  3. uoj#422. 【集训队作业2018】小Z的礼物

    uoj#422. [集训队作业2018]小Z的礼物 题目描述 Solution 所有礼物全部取到的方案数并不好求,因此我们考虑min−maxmin-maxmin−max容斥,转化为第一次取到集合中某一 ...

  4. UOJ#418. 【集训队作业2018】三角形

    #418. [集训队作业2018]三角形 和三角形没有关系 只要知道儿子放置的顺序,就可以直接模拟了 记录历史最大值 用一个pair(a,b):之后加上a个,期间最大值为增加b个 合并? A1+A2= ...

  5. 【集训队作业2018】喂鸽子

    我的计数还是太差了-- 这道题现在知道三种做法. 1. 直接DP 首先显然需要min-max容斥(不知道请百度),不然很难算. 显然对于大小相同的集合答案一样,问题转化为求 \(f_c\) 即 \(c ...

  6. UOJ#449. 【集训队作业2018】喂鸽子 min-max容斥,FFT

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ449.html 题解 设 f(i) 表示给 i 只鸽子喂食使得至少一只鸽子被喂饱的期望次数,先 min-max容斥 一下. ...

  7. [集训队作业2018]小Z的礼物(min-max容斥,插头dp)

    传送门 这种求 "取到所有物品的期望时间" 的题一般都用 min−maxmin-maxmin−max容斥 解决: 设t(i,j)t(i,j)t(i,j)为取到格子(i,j)(i,j ...

  8. 【集训队作业2018】复读机

    即使是一道菜题,也掩盖不了窝生成函数弱的事实. 窝看到题目只想到了DP,还是生成函数不够熟.然后直到神仙WWJ提醒我用生成函数-- 首先是排列,那就可以写成指数型生成函数的优美形式.直接表示成exp吧 ...

  9. 【集训队作业2018】围绕着我们的圆环

    我貌似开始爆OJ了 主要是因为预处理的范围写小,以及第一次写带删除线性基,然后就调了好久/cy 如果把 \(A\) 看做一堆列向量,然后对于 \(C\) 的一个列向量 \(V\) ,以及对应列的 \( ...

  10. [集训队作业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 ...

最新文章

  1. 个人使用OKR目标管理工具的感悟
  2. httpclient工具使用(org.apache.httpcomponents.httpclient)
  3. Oracle 11g 预定义账户和PLSQL工具、企业管理器的初步使用
  4. 《计算机网络》谢希仁第五版考试重点整理
  5. Java中的双重检查锁定
  6. Windows系统下,好用的录屏软件工具/屏幕录制工具
  7. 阿里云更新ESC镜像
  8. antd中tooltip换行_ant design 中实现表格头部可删除和添加
  9. var radioname = new array();_兰帕德:引进VAR是为了回放关键时刻的情况,他们的行为令我困惑...
  10. 京东面试官:SQL 语句中 left join 后用 on 还是 where,区别大了!
  11. 从零基础入门Tensorflow2.0 ----三、9.tf.function
  12. 【总结】6种机器学习中的优化算法:SGD,牛顿法,SGD-M,AdaGrad,AdaDelta,Adam
  13. lvds输入悬空_LVDS原理及应用
  14. 微信小程序打印实时日志
  15. 删除安卓7.1源码中自带的Japanese IME输入法
  16. Spring的初体验-1
  17. Nginx安装及简介
  18. Aria2使用详细教程
  19. 计算机开机自动进入bios,电脑开机自动进入bios界面的原因及解决办法
  20. excel文件不能编辑怎么回事?

热门文章

  1. gazebo中计算理想相机模型的fx fy
  2. Owin Katana 的底层源码分析
  3. LIME-AI可解释模型:《“Why Should I Trust You?” Explaining the Predictions of Any Classifier》论文笔记
  4. 生鲜行业采购管理系统把控采购成本,实现精细化管理
  5. 100 个网络基础知识普及,看完成半个网络高手!
  6. python 函数基础
  7. 使用ffmpeg将视频转成HLS(m3u8)格式
  8. Unity Android Ios 微信SDK 接入
  9. 2015年讲师评选正式开始,培训行业讲师年终总结啦!!
  10. linux———/bin/sh、 /bin/bash、 /bin/dash的区别