xzy的概率期望题单题解
xzy的概率期望题单题解
题单 \(link\) :https://www.luogu.com.cn/training/4922#problems
因为自己概率期望实在是太拉啦
前面一些简单的就不写了(或者您可以认为我从蓝题开始写)
P2634
设有 \(k\) 条路经的权值之和是 \(3\) 的倍数,那么答案就是 \(\frac{k}{n^2}\)
点分治或者 \(dp\) 一下就好了
P1850
令 \(dp_{i,j,0/1}\) 表示对于前 \(i\) 个时间段,申请 \(j\) 次,第 \(i\) 个时间段有没有申请( \(0\) 表示没有)的期望长度,答案就是 \(\min_{j=1}^m\min(dp_{n,j,0},dp_{n,j,1})\)。
令 \(w_{i,j}\) 表示 \(i,j\) 两点间的最短路,\(floyd\) 预处理一下就好,
令 \(C1\) 表示 \(c_{i-1}\),\(D1,C2,D2\) 同理
那么转移就是:
\(dp_{i,j,0}=\min(dp_{i-1,j,0}+w_{C1,C2},dp_{i-1,j,1}+w_{C1,C2}\times (1-k_{i-1})+w_{D1,C2}\times k_{i-1})\)
\(dp_{i,j,1}=\min(dp_{i-1,j-1,0}+w_{C1,C2}\times (1-k_i)+w_{C1,D2}\times k_i,dp_{i-1,j-1,1}+.........)\)
相信大家都已经看明白转移了,后边那个 \(......\) 意思就是左边的两个点和右边两个点的组合,然后搞一搞就好了
P1635
给我的启发就是原来有关转移的量如果有多个的话,可以用一个期望来代表
令 \(dp_i\) 表示 答案,然后 \(len\) 表示连到现在期望的 \(o\) 的个数
如果第 \(i\) 位是 \(o\) :\(dp_i=dp_{i-1}+2\times len+1,len=len+1\)
\(x\) :\(dp_i=dp_i-1,len=0\)
\(?\) :因为概率相同所以救赎各自的转移除以二再加起来 \(dp_i=dp_{i-1}+\frac{2\times len+1}{2},len=\frac{len+1}{2}\)
P6046
跟着 \(dengyaotriangle\) 大佬学习了 \(\Theta(n)\) 的做法
考虑这样一个转化:\(E=\sum_{x=1}^{n-1}P(x\le t)\)
这个可以这么考虑:
\(E=\sum_{x=1}^{n-1}P(t=x)\times x=\sum_{x=1}^{n-1}\sum_{y=1}^xP(t=x)=\sum_{y=1}^{n-1}\sum_{x=y}^{n-1}P(t=x)=\sum_{x=1}^{n-1}P(x\le t)\)
然后一个点的概率一定只跟左右最靠近的比他大的点的位置有关,即使那个点被合并了,合并后也还是在那个位置,设到左边是 \(a\) 次合并,右边 \(b\) 。
那么容斥一下,他不死的方案数就是 \(x!(C_{n-1}^x-C_{n-1-a}^{x-a}-C_{n-1-b}^{x-b}+C_{n-a-b-1}^{x-a-b})\)
总的方案数是 \(x!C_{n-1}^x\)
所以不死的概率就是 \(\dfrac{C_{n-1}^x-C_{n-1-a}^{x-a}-C_{n-1-b}^{x-b}+C_{n-a-b-1}^{x-a-b}}{C_{n-1}^x}\)
发现都是这四项都是 \(\sum_{x=1}^{n-1}\dfrac{C_{n-i-1}^{x-i}}{C_{n-1}^x}\) 的形式
然后化简
\(\sum_{x=1}^{n-1}\dfrac{C_{n-i-1}^{x-i}}{C_{n-1}^x}=\sum_{x=1}^{n-1}\dfrac{(n-1-i)!x!}{(n-1)!(x-i)!}=\dfrac{1}{(n-1)^{\underline{i}}}\sum_{x=1}^{n-1}x^{\underline{i}}\)
然后因为 \(\Delta(x^{\underline{m}})=mx^{\underline{m-1}}\)
那么移一下项,操作一下就得到 \(\sum_{x=1}^{n-1}x^{\underline{i}}=\dfrac{n^{\underline{i+1}}}{i+1}\)
带回到原来的式子,就得到 \(原式=\dfrac{1}{(n-1)^{\underline{i}}}\times \dfrac{n^{\underline{i+1}}}{i+1}=\dfrac{n}{i+1}\)
值得注意的是 \(i=0\) 时这个式子不成立,因为 \(0\) 的下降阶乘幂蛮特殊的,然后显然那个式子是 \(n-1\)
于是你提前预处理一下,单调栈一下啥的就好了。
P1291
考虑递推,令 \(f_i\) 表示获得 \(i\) 个不同的人物的期望次数,令 \(f_{i+1}=f_i+E\)
则有:\(E=\sum_{x=1}^\infty x\times(\dfrac{i}{n})^{i-1}\dfrac{n-i}{n}\)
然后就变成了一个等比等差数列求和问题。。。随便算一下就好
\(f_{i+1}=f_i+\dfrac{n}{n-i}\)
有个直接理解的方法,不过我理解不了
CF804D
原来这都能根号分治 \(tql\)
并查集什么的判一下连通性就不说了
然后考虑只有一次询问:只需要求不同组合的答案除以 \(n^2\) 即可
设两个的大小分别为 \(p\) 和 \(q\) ,且 \(p\le q\) 。我们一种组合的答案是两棵树的直径以及这两个点在各自树里面的最大深度加一,这三个值的最大值,然后我们按最大深度在两棵树内排序,然后枚举 \(p\) 中每一个点,然后在 \(q\) 里面二分即可。实际上可以用双指针就是 \(\Theta(p+q)\) 的,但是这里用二分有妙用。
考虑每次询问,如果 \(p\le\sqrt{n}\) ,那么时间复杂度就应该是 \(\Theta(q\sqrt{n}\log n)\) 的,然后如果大于,则 \(\Theta(\dfrac{n^2}{p^2}\times p\times\log n)\) ,因为 \(\sqrt{n}\le p\) 所以最多是 \(\Theta(n\sqrt{n}\log n)\) 然后就完事儿了
CF453A
属实大水题
\(\sum_{i=1}^m\left[\left(\dfrac{i}{m}\right)^n-\left(\dfrac{i-1}{n}\right)^n\right]\times i\)
P3802
考虑取完所有情况之后,每个位置产生贡献的概率是相同的,所以只用计算第一段就好。(比如考虑成对于一种排列,然后一个一个循环移动)
\(7!\times\sum_{i=1}^7\dfrac{a_i}{n-i+1}\)
CF16E
看到数据想状压,令 \(f[???]\) 表示存活情况是这样的概率, \(1\) 表示还活着, \(0\) 表示死了。那么转移就很简单了,选出这两条鱼的概率乘以赢得概率之和,方程就不写了。
P4550
设总共需要 \(x\) 步,那么答案就是 \(\dfrac{x^2+x}{2}\) ,所以我们分别维护一次方的期望和二次方的期望
令 \(f_i\) 表示一次方,那么有以下的递推方式:
\(f_{i+1}=\dfrac{i}{n}\left(f_{i+1}+1\right)+\dfrac{n-i}{n}\left(f_i+1\right)\)
后一部分很好理解,关于前面,我们考虑如果抽中了已经有的,那么就会浪费一次机会,所以系数是 \(\dfrac{i}{n}\) 。
二次方类似。
P3239
设 \(P_i\) 表示第 \(i\) 张牌最终发动了的概率,那么答案就应该是
\(E=P_i\times d_i\)
但这个 \(P_i\) 不怎么可以直接推出来,所以我们考虑把 \(P_i\) 分散到不同的情况下加起来,至于怎么想到这一步。。。可能就是经验吧
令 \(f_{i,j}\) 表示前 \(i\) 张牌中在总共的 \(r\) 轮里总共发动了 \(j\) 张牌的概率,那么 \(P_i=\sum f_{i-1,j}\times\left[1-\left(1-p_i)^{r-j}\right)\right]\) , \((1-p_i)^{r-j}\) 的意思是,总共有 \(r-j\) 轮会考虑到他(因为前面有 \(j\) 个已经发动了他就没机会发动了),这 \(r-j\) 轮都没有发动的概率,那么 \(1-(1-p_i)^{r-j})\) 就表示发动了的概率。
在这里有个我一直难以理解的地方,那就是一张牌实际上只能发动 \(1\) 次,那么这里为什么不需要容斥一下子。因为实际上 \(跳过\) 这个词的意思可以理解为尝试了,但是无论结果如何都不造成伤害,只有第一发动会造成伤害。
那么因为前面的牌不会被后面影响,所以我们可以考虑 \(dp\)
\(f_{i,j}=f_{i-1,j}\times(1-p_i)^{r-j}+f_{i-1,j-1}\times[1-(1-p_i)^{r-j+1}]\)
前面意思是自己不发动,后面意思是自己发动
然后完事儿了。
P3750
先考虑 \(k=n\) 的情况,有个显然的事情就是你两次操作交换顺序实际上是无所谓的,那么一个位置操作两次就相当于没有操作。那么操作数量最少的方案实际上就是唯一的方案:找到目前最靠右的亮着的,因为右面不可能再有可以影响他的了,所以他自己必须操作,然后重复这个流程直到所有灯都灭,显然总的操作方案数不会超过 \(n\) 。
然后接下来这个做法怎么想到的我也不知道,意思是说我们定义 \(f_i\) 的意思是距离全灭还差的操作数是 \(i\) 的时候(意思就是还有 \(i\) 个位置要操作),期望通过多少次变成还有 \(i-1\) 个位置要操作。这样就跟哪些位置要操作就没有任何关系了,我们只关心还需要多少次才能全灭。那么有这样的转移
\(f_i=\dfrac{i}{n}+\dfrac{n-i}{n}\times(f_{i+1}+f_i+1)\)
前面可以理解为一次操作就点到了那 \(i\) 个位置中的一个,后面可以理解为没点到,这一次用 \(1\) 的操作次数,然后用 \(f_{i+1}\) 的操作次数回到现在,再用 \(f_i\) 的操作次数下去。把所有的加起来,然后到 \(k\) 的时候直接加上 \(k\) 就好了。
P3412
其实只需要求出每个点走到父亲的期望次数就好了,把这个作为边权,然后跑一下换根 \(dp\) 就完事儿了。
假设你已经知道了从儿子到自己的所有期望次数 \(x_i\) ,令度数为 \(d\) ,那么从这个点往上走的期望次数就应该是
\(E_u=\dfrac{1}{d}+\dfrac{1}{d^2}\times\sum_{v\in son_u}(1+E_v+1)+....\)
后面就是多个儿子不同的走的顺序,然后最后要回到父亲,然后推推式子,变成一个等比数列乘以等差数列的一个数列,然后求求和就好了
最后就是 \(E_u=d+\sum_{v\in son_u}E_v\)
然后最后一层你已经知道了,直接根据最后一层来推就好了
P3232
其实只需要求出每条边期望经过多少次就可以了
然后这个边是无向的,每次都跟两边有关系,不好直接求,我们考虑求每个点的经过次数,设 \(f\) 表示这条边的期望经过次数, \(d_i\) 表示点的度数, \(g_i\) 表示点的经过次数,那么 \(f=\dfrac{g_u}{d_u}+\dfrac{g_v}{d_v}\)
然后怎么求 \(g\) 呢?因为各个点之间都是相互依赖的,所以我们考虑解方程。
\(\begin{cases}g_1=\sum_{(1,v)\in edge,v\ne n}\dfrac{g_v}{d_v}+1\\\\g_u=\sum_{(u,v)\in edge,u\ne 1,v\ne n}\dfrac{g_v}{d_v}\end{cases}\)
然后你高斯消元就好啦!
P3317
才知道 \(matrix\ tree\) 定理求的是 \(\sum_T\prod_{e\in edge}w_e\) 。
这里要求所有的生成树,所以自然想到 \(matrix\ tree\) 定理
然后这里其实就是求 \(\sum_T\prod_{e\in edge}p_e\times\prod_{e'\notin edge}(1-p_{e'})\)
然而矩阵树定理只能计算生成树上的边,所以我们考虑用生成树上的边替换掉后边的东西,然后提一发公因式,给边权赋值然后直接求一下行列式就好了
\(\ \ \ \ \sum_T\prod_{e\in edge}p_e\times\prod_{e'\notin edge}(1-p_{e'})\)
\(=\sum_T\prod_{e\in edge}p_e\times\dfrac{\prod_{e''}(1-p_{e''})}{\prod_{e\in edge}(1-p_e)}\)
\(=\prod_e(1-p_e)\sum_T\prod_{e\in edge}\dfrac{p_e}{1-p_e}\)
P3830
第一问:令 \(f_i\) 表示有 \(i\) 个儿子时的答案,那么显然的转移:
\(f_i=\dfrac{f_{i-1}\times(i-1)+f_{i-1}+2}{i}\)
第二问:这种概率乘以等差数列的题,套路地转化答案:\(E=\sum P(x\ge i)\)
然后显然我们还是要递推,因为跟深度有关所以我们需要二维,令 \(f_{i,j}\)表示有 \(i\) 个儿子时深度大于等于 \(j\) 的概率,那么答案就应该是 \(E=\sum P(x\ge i)=\sum f_{n,i}\)
然后转移是这样的:
\(f_{i,j}=\sum_{k=1}^{i-1}\dfrac{f_{k,j-1}+f_{i-k,j-1}-f_{k,j-1}\times f_{i-k,j-1}}{i-1}\)
上面的部分是一个简单的容斥,下面是表示经过所选的操作方式后左儿子恰好有 \(k\) 个叶子的概率,挺奇妙的,都是 \(\dfrac{1}{i-1}\)
众所周知,我们只需要求出有多少种操作方式以及有多少种操作方式可以达到我们的目的即可。关于前者,因为我们第 \(i\) 次操作时有 \(i\) 个叶子,所以我们有 \(i\) 种选择,因为只需要操作 \(i-1\) 次,所以前者就是 \((i-1)!\)
至于后者,根据乘法原理,我们可以将其转化为左儿子有 \(k\) 个叶子的概率(注意是 \(k\) 个儿子,不考虑操作顺序以及操作对象)乘以这 \(k\) 次操作总共有多少种操作方式(考虑操作顺序和操作对象),前者显然就是 \(C_{i-2}^{k-1}\),后者和上一段说的是一个东西,所以是 \((k-1)!\) ,同时我们要考虑右儿子的操作方式 那就是 \([i-2-(k-1)]!\) ,然后你把这些东西乘起来就好了
P4206
首先就是如果猫走两步肯定是不劣的
然后你要考虑你的 \(f\) 数组应该表示什么状态,我们需要的表示的状态有两个要求,能唯一确定某一类状态,而这类状态对答案的贡献是相同的,而且可以很方便的转化为答案。但总之还是要多做题积累经验。。。我实在是太菜了。。。。
令 \(f_{u,v}\) 表示猫在 \(u\) ,老鼠在 \(v\) 的期望,令 \(sec\) 表示走两步之后的位置,那么有以下转移
\(f_{u,v}=\sum_{(v,r)\in edge\,or\,v=r}\dfrac{f_{sec,r}+1}{d_v+1}\)
然后你记搜一下就好了
P4562
定义一个数是独立的,当且仅当 \([l,r]\) 中除自己之外没有其他因数,这个可以线性筛一下最小因数,然后除一下就是最大因数,然后看看是否大于 \(l\) 即可。
显然一个独立数一定会经过一次,所以它对答案的贡献很好算。
对于非独立的数,考虑什么情况下会经过它,就是有独立数在它后面时它才一定会发动,否则根据独立数定义已经把所有的数搞掉了。有独立数在他后面这个东西我们可以考虑容斥,考虑全部在前面的方案,设总共有 \(k\) 个独立数,那么就应该是 \(k!\times\sum C_{n-1-k}^{i-1-k}\) ,然后减一下就好了。
P5405
神仙题。
首先那个条件就相当于把方向去掉之后是一棵树,然后如果是一棵外向树(意思是说都向下指),那么一个点必须先他的子树内的点被选,令 \(s_x\) 表示子树内的 \(w\) 之和,那么先选到 \(u\) 的概率就是 \(\dfrac{w_u}{s_u}\) ,当然你可以推推式子都无所谓。
然后考虑 \(dp\) ,令 \(f_{i,j}\) 表示对于 \(i\) 这个点,\(s_i=j\) 的合法的概率,那么显然有 \(f_{u,j}=\dfrac{w_u}{s_u}\prod_{v\in son_u}f_{v,k_v},\sum k_v=j\)
然后考虑有反向边,可以理解为正反都可以的概率减去正向边的概率,正反都可以相当于不存在这条边,然后你可以根据这种理解在 \(dp\) 数组上加加减减。
然后注意你初始化要乘以这种情况发生的概率,最后你要除以 \(s_u\) ,也就是枚举 \(j\) 除以 \(inv(j)\)