菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
219
0

gym1016231E

原创
05/13 14:22
阅读数 39609

题意

给定\(n,g,t\)及序列\(\{c_i:1\le i\le n\}\)
\(n\)张桌子,每张可容纳的人数为\(c_i\)
\(t\)群人来吃饭,每群人数为\([1,g]\)中随机的一个整数\(x\),会选一张最小的能容纳\(x\)个人的桌子坐下(若没有则离开)
求最后的期望人数
\(n,t\le 100\)\(g,c_i\le 200\)

做法

假设\(c_1\le c_2\le \cdots\le c_n\le g\)

考虑观察题目的性质:

  • 最后就坐的桌子,是若干段连续的区间
  • 若目前的一群人\(x\)人就坐,之前\(\le x\)的人数的群体一定也就坐了

\(f_{l,r}\)为前\(r-l+1\)群人,恰好就坐\([l,r]\)的概率,枚举最后一群人就坐的位置,转移显然:

\[\begin{cases} f_{i,i-1}=1\\ f_{l,r}=\sum\limits_{k=l}^{r} \frac{c_k-c_{l-1}}{g}{r-l\choose r-k}f_{l,k-1}f_{k+1,r} \end{cases}\]

\(g_{i,j}\)为前\(j\)群人,在\([1,i)\)就坐的概率
转移利用\(f\),枚举与\(i-1\)在一段的数量(可能为\(0\)),转移显然:

\[\begin{cases} g_{0,0}=1\\ g_{i,j}=\sum\limits_{len=0}^j {j\choose len}f_{i-len,i-1}\cdot g_{i-len-1,j-len} \end{cases}\]

根据期望的线性性,计算每一张桌子\(i\)的贡献:

\[\sum\limits_{k=1}^{min(i,t)} \sum\limits_{j=1,i-j+1\le k}^i (\frac{1}{g}\sum\limits_{x=c_{j-1}+1}^{c_i}x)f_{j,i-1}\cdot g_{j-1,k-(i-j+1)}\sum\limits_{num=k}^{t}{t\choose num}{k-1\choose i-j}(1-\frac{c_i}{g})^{t-num}(\frac{c_i}{g})^{num-k} \]

枚举在第\(i\)张桌子就坐后的这一刻,\([1,i]\)\(k\)张桌子已经有人
枚举就坐后的这一刻,\(i\)这一极长段是以\(j\)开始的
枚举总共有\(num\)\(\le c_i\)的人群

这样做单次是\(O(n^3)\)的,观察最后那个\(\sum\),稍加变形就很容易做到单次\(O(n^2)\)了:

\[\begin{aligned} {k-1\choose i-j}(\frac{c_i}{g})^{-k}\sum\limits_{num=k}^{t}{t\choose num}(1-\frac{c_i}{g})^{t-num}(\frac{c_i}{g})^{num}\\ \end{aligned}\]

总复杂度\(O(n^3)\),但实测\(O(n^4)\)跑得飞快

发表评论

0/200
219 点赞
0 评论
收藏
为你推荐 换一批