概率与期望题目总结
$概率与期望18题联合题解$
$Part_1:简单期望$
这部分期望题目较为简单基础,是期望的练手题,思维难度较小。
基础期望$dp$。依照定义:期望$=$概率$\times$贡献做即可。
本题提醒我们:在正向转移发现无法解决,且这些选择都具有多个,难以枚举,因而概率相同时,要考虑逆向$dp$。
事实上,绝大部分的概率$dp$都是逆向的。逆向$dp$的实现可以考虑$dfs$.
代码:Link
本题提醒我们:在遇到高次项的期望贡献时要拆开来看,分别计算一次项对应的贡献。
代码:Link
简单推个小式子即可。能蒙对当且仅当相邻的两题答案一样,相邻两题答案的组合共有$a[i]\times a[i-1]$种情况,蒙对有$min(a[i],a[i-1])$种情况,相除就是单个题目的期望,加和得到总期望。
代码:Link
本题提醒我们:期望是线性的,我们可以通过计算每一个样本的期望得到集合里总的期望。
简单题。状态一眼就能设出来,然后依据概率转移即可。
本题提醒我们:当选择的个数是有限、可枚举的且通常概率不尽相同时,我们可以通过枚举每一种情况来正向进行期望$dp$。
简单题。仍然运用期望的线性性质,算出每个格子的期望,小小容斥一下再相加即可。
本题提醒我们:???好像也没什么。就是注意算概率的时候要不重不漏,有时需要容斥等细微处理,以及卡精度问题。
代码:Link
和T2差不多,注意同时要计算$len$的期望。
代码:Link
$Part_2:进阶期望$
这部分期望题目难度逐渐上升,是期望的进阶题,具有思维难度,同时还会结合组合、图论等其它知识点,大部分是远古时期省选题目。
思维题。还是先考虑拆总的期望为每个人的期望,再列出式子即可。
后面的方法就很多了,可以暴力拆式子化简,也可以用long double存组合数硬算概率。具体见两篇题解。
代码在题解里,就不放了。
显然操作顺序与最终答案无关,因此我们可以先将操作装进结构体排序,将所有包包放在前面,碎片放在后面。因为所有的挑战只有成功/失败两种结果且每种结果概率不等,因此显然是正向$dp$。容易想到定义$dp[i][j][k]$ 为当前在第$i$个挑战,一共赢了$j$场,目前背包有$k$空间的概率,于是分类讨论赢/输的情况,那分类讨论一下是包包还是碎片,分别转移即可。
本题提醒我们:正向$dp$的判定,$dp$设上题目所有的维度,但绝不要设胜负(成功与否),因为这是期望里的一部分!!!
由于在每个节点有多个等概率的选择,因此显然倒序$dp$。我们可以预处理两点之间距离$dis[i][j]$和猫猫在位置$i$,老鼠在位置$j$的情况$nxt[i][j]$表示猫猫会走到哪里,然后用记搜实现倒序$dp$,令猫和老鼠的位置分别是$x,y$,老鼠下一步可能在$z$,则式子显然:$dp[x][y]+=dfs((nxt[x][y], z)+1)/(deg[y])$,所求即为$dfs(s,t)$。
本题提醒我们:几乎所有图上期望都是倒序$dp$,且一般多用记搜实现。
代码:Link
期望好题。
先判断是正序还是倒序 $dp$ 。
庄家每次可以等概率选取一张牌,有多个等概率的选择,因此是倒序$dp$。
现在考虑状态怎么设。既然是倒序$dp$,那就要从最终状态反推回原状态。最后的状态是只有一个人在游戏中,那这个人的胜率就是$1$,且这个人是庄家。于是我们考虑设$dp[i][j]$表示目前游戏中有$i$人,从庄家开始数第$j$个人的胜率,于是初始状态就可以表示为$dp[1][1]=1$,所求即为$dp[n][i](1\le i \le n)$。有了状态,式子就很好得到了:我们枚举每一张卡片$k_i$,得到从庄家开始数第$d_i$个人会死,那么对于每一张卡片所确定出的庄家$d_i+1$,我们可以求出来当前的人$j$在该庄家下的排名$w_i$,这是好求的,然后就$dp[i][j]+=dp[i-1][w_i]/m$转移即可。
这道题的难点是设状态。我们之所以这样设,是因为发现了以下两点:
- 在设计第二维时,考虑到每一个人在本质上没有区别,有区别的只是庄家这个身份,因此不能简单地按照编号定义每个人,而是要转换思路,以庄家为基准定义每一个人。
- 在设计第一维时,如果简单地将$轮次$作为第一维,那么在倒序枚举的情况下无法确定初始状态,不得不改变一下方式。我们知道初始状态应当是只剩一个庄家,根据刚才对第二维的设计对应的是就是庄家开始的第一个人。第一维应当与时间(轮次)相对应,能随他们而变化的,只有剩余人数这一维度。 因此得到了方程定义和初始状态:$dp[1][1]=1$。
本题提醒我们:难一些的期望$dp$的关键是设状态。一般地,我们先确定$dp$顺序,再确定如何表示初始状态,依照这两点来定义$dp$方程。
代码:Link
$出了dp状态定义,方程式一般不会太难。$
先回顾上文写的那句话。
然后——
"[NOIP2016]换教室"默默地向你翻了一个白眼。
先分析$dp$顺序,由于只有成功/失败两种情况且概率各不相同,显然正序$dp$。
有了顺序,状态就好设了。设$dp[i][j][0/1]$表示第$i$个时间段,$liuliu$一共申请了$j$门课,当前这一门课申请$(1)$,未申请$(0)$的期望。
千万不要设胜负!!!
转移也非常简单。显然 $dp[i][j][0/1]$ 会由 $dp[i-1][j][0/1]$ 或 $dp[i-1][j-1][0/1]$ 转移而来,由于$n\le 300$,可以$Floyd$预处理出两点之间距离,分类讨论一下上一个时间段与当前时间段自己所在的位置,再与概率相乘即可。
本题提醒我们:分类讨论要看全,邻接矩阵存重边要判断边权,全源最短路之间最短路最好用$Floyd$。
整体来看这道题还是进阶期望里挺简单的一道,几乎没有什么期望部分。
除了转移方程代码有点长。
代码:Link
$n \le15$,一眼状压。等概率的期望,显然逆推。
设$dp[i][j]$表示第$i$轮后第$1→i-1$轮状态为$j$的期望,一般地,逆序枚举的期望$dp$初始状态就是$0$。令每个宝物额前提状态集合为$s[i]$,当前物品是$t$,那显然得到$dp$方程:
$if\ s[t]\ \&\ j\ ==0\ \ →dp[i][j]+=(max(dp[i+1][j],dp[i+1][j\ \&\ (1<<t)+p[t]])/n$
$else\ \ →\ dp[i][j]+=dp[i+1][j]/n $
本题提醒我们:倒序$dp$有多种方式:图论问题中可以记搜(T1、T9)、可以倒序设状态(T10)、可以倒序枚举(T12)。
代码:Link
假期望,真树形$dp$.
本题的前置:洛谷P3047。
该题的统计思想在本题中会用到,即$up-down$的树形$dp$思想。
在树形$dp$维护信息时,很多时候我们需要$O(n)$维护一个点到全局的信息,这时候就需要该思想。具体地,该思想通过的是两次$dfs$,第一次的$dfs$维护根节点向下的信息,第二次维护叶子节点向上到根节点的信息。但显然两次的信息会由重复,那么就需要容斥原理减去重复的一部分。
对于本题:
首次$dfs$中,令父亲节点为$x$,儿子节点为$y$,通过边的概率为$p$,由概率的计算公式$P(A+B)=P(A)+P(B)-P(AB)$,则容易知道$dp[x]=dp[x]+dp[y]\times p-dp[x]\times dp[y]\times p$。
第二次$dfs$中,我们需要计算所有除去$y$的子树内的点对$y$处答案的贡献。那这个东西显然可以用$x$来更新。但此时的$dp[x]$已然包含了$y$的子树的部分,因此需要减去。具体地,由公式$P(A+B)=P(A)+P(B)-P(AB)$,此处的$P(A+B)$就是$dp[x]$,$P(A)$是$dp[y]\times p$,那么所求的$P(B)$就是$x$对$y$作出的除$y$子树以外的点的贡献。化简式子得到是$\frac{dp[x]-dp[y]\times p}{1-dp[y]\times p}$,在根据概率公式计算即可。
注意当$dp[y]\times p=1$时,该式子无意义,但同时意味着$dp[y]$已然是$1$,直接跳过,向下遍历即可。
本题提醒我们:概率计算不重不漏,树形$dp$要考虑二次遍历,上下转移。
$二次遍历,上下转移!!$
代码:Link
注意到是一个有环无向图,无法进行一般的树形转移。
由于点数较少,而边数过多,因此考虑转化边的期望为点的期望。设连接一边$t$的两点$x,y$的期望分别为$p_x,p_y$,二者的度数分别为$d_x,d_y$,那么这条边的期望$q_t=\frac{p_x}{d_x}+\frac{p_y}{d_y}$。
考虑如何求点的期望。设点$x,y$间有边相连,那么期望$f_x=\frac{f_y}{d_y}$。由于点$n$无从转移,因此一共有$n-1$个这样的式子,未知数是$f_i(1<i<n)$,考虑高斯消元解出期望。需要注意的是,点$1$的初始期望为$1$。
然后贪心,期望越大赋值越小即可。
本题提醒我们:图论中的期望可以化边为点,当未知数的转移不具有规律性,不可简单$dp$时,要高斯消元来解。
与上一道题有相似的地方,但也有不同。
求异或时,显然异或的每一位是互不相关的,因此我们可以分类讨论,求出每一位的期望。
显然这类图论题目都是倒序$dp$。因此想到设$f[i]$为$i→n$的该位异或路径为$1$时的概率。这里设的时候不能简单设路径的期望,因为只有异或值为$1$才会对答案做出贡献。
式子就容易得出:
$dp[x]=\frac{dp[y]}{deg[x]}(w(x,y)==0)+\frac{1-dp[y]}{deg[x]}(w(x,y)==1)$
略微变形一下,高斯消元$log\_MAX$次即可(一般直接取$30\ or\ 31$)。
期望$dp$,初始状态为$0$,所求即为$dp[1]$。
本题提醒我们:遇到异或这种运算时可以按位处理,设状态的时候要能直接表示出初始状态,由于一个点的异或值可能性有两种,且概率相加为$1$ (这很重要!到一个点的异或值的样本空间只有$0$和$1$),不然就要像T11一样表示两种情况(期望没有规律啊)!
代码:Link
先考虑最优解是什么:
显然每一次最右边的亮灯是必须要按的(没得选)。于是最优策略就是从大到小枚举每一个亮灯,改变它左边灯的状态。这里$O(n\sqrt n)$或$O(nlogn)$都不难做到。
先分析$dp$顺序。每个灯有多种可能的状态,因此倒序$dp$。
状态怎么设?这是本题最难的地方。
分析题目给的可能的初始条件。在剩余最优策略还有$k$步时,直接按最优策略走。
这道题应该算一道特殊性质题,因为没有这个$k$步的条件,题目照样可以做,但状态会难设很多。原因是它提醒了我们每一次按灯有按正确和按错误的两种可能性,设状态时可以从按灯正确与否入手。
但是按灯的过程的阶段性不强。上面的题目,一般都有轮数/时间段等限制,可以作为阶段,但是按正确与否的灯,似乎没有这方面的限制。
$dp状态的设计,往往取决于转移时变化了什么。$
按一次正确的灯,正确的灯会增加一盏,因此本题变化的是正确的灯的数量!!
我们不能简单的按了$i$盏正确的灯时的期望,这样错误的灯的个数会影响答案统计。因此,设$dp[i]$为从有$i$盏灯需要按到$i-1$盏需要按的期望,这样设隐含着本次按的灯是对的这一条件,就好转移了。
方程是容易的:$dp[i]=\frac{i}{n}+\frac{n-i}{n}\times(dp[i]+dp[i+1]+1)$。
含义是按对的概率$(\times 1)$ $+$按错的概率$\times$按错所需的代价。
变形一下统计答案即可,细节见代码。
本题提醒我们:
- 要关注特殊性质
- 要关注转移过程中变化了什么,根据变化的量来设$dp$状态。
代码:Link
$Part_3:毒瘤期望$
这部分期望题目,是期望题目中几乎不可做的题,思维难度大。
先讲$40pts$的部分分,就是该题:
两道题本质上是全等的,只有数据范围不同。
有多个模式串,自然想到$AC$自动机。于是建出$AC$自动机,对每一个字符串的末尾打上标记,所求就是最终停在每一个标记点的概率。
直接设每个点的概率是不好转移的,因为无法确定初始状态。经过根节点的概率如何求出呢?是$1$吗?但显然由于可以反复地返回根节点,因此这样是不成立的。
但是我们可以简单地求出经过每个点的期望。这部分是T14。求期望的原因是根据期望的定义,$E(i)=P(i)\times$经过次数,但是本题中,到达终点就停下,这个次数是$1$啊!因此求出的期望就是概率了。
那么高斯消元即可。由于一共最多可以建出 $nm$ 个点,因此复杂度大致是$O(n^3m^3)$的,可以通过该题。
本题提醒我们:多模字符串想到$AC$自动机,注意概率和期望之间的灵活转化!
代码:Link
回到本题。$O(n^3m^3)$的复杂度通过本题显然力不从心。考虑这个算法的冗余部分在哪里。高斯消元后我们求出了每一个自动机上的点的期望,但是所有非终点的期望我们实际上是不需要的。于是考虑把所有非终点构成的集合的期望记作$x_0$,每一个终点的期望(即概率)记作$x_{1 - n}$。
考虑到达每一个终点的过程。
发现一个显然的性质,每一个终点的到达,都是由一个无法匹配的串顺着预测匹配$m$步得到的。因此$x_i=\frac{x_0}{2^m}$。
但这样实际上是不正确的,不然所有的字符串概率应该相同。我们没有考虑在这个匹配路径上遇到其他字符串终点的情况。这样的情况发生意味着匹配字符串$i$的某个前缀和干扰字符串$j$的某个后缀完全重合。在$x_0$的基础上加上这个干扰匹配的概率就是这条路径真正的概率了。
$x_0+\sum_{j=1}^{n}dp[j]\sum_{k=1}^{n}\frac{1}{2^{m-k}}[pre_{i,k}=suf_{j,k}]$
再结合一个显然的方程:$\sum_{i=1}^{n}x_i=1$,就可以高斯消元解$n+1$个方程组了。
注意最终要一些奇怪的恒等变形?不然会奇奇怪怪地因为精度炸掉。
本题提醒我们:分析非完美算法失败的原因,考虑非完美算法的冗余在哪里,建立将所有不合法情况看成一种情况的意识。
在做了许多难度大的期望之后发现这道题也没有那么毒瘤了呢~~
显然的树形$dp$。考虑两点之间路径的情况是从起点 $x$ 到 $lca$ 再到终点 $y$ 的。由期望的线性性质,这两个部分我们可以分别计算,前缀和、差分处理。于是考虑设 $f[u]$ 为当前节点 $u$ 到 $fa[u]$ 的期望步数,反之 $g[u]$ 为从 $fa[u]$ 到 $u$ 的期望次数。
注意求$f$和$g$的顺序是不可改变的!
原因是树形结构的特殊限制。从下到上的路径是唯一的,但从上到下的路径有着多种选择,依赖着从上到下的答案。这本质上还是$up-down$思想。
草稿本:那你为什么妄图先算$g$忙了将近$1h$啊
然后式子就好列出了,注意分类讨论要细致。
$$ f[u]=\frac{1}{deg[u]}+\sum_{x \in son[u]}\frac{1+f[x]+f[u]}{deg[u]} $$
这个表示的就是一步走对的可能$+$走错了,走到子节点,需要多一步返回的可能。
$$ g[u]=\frac{1}{deg[fa[u]]}+\frac{1+g[u]+g[fa[u]]}{deg[fa[u]]}+\sum_{{x \in son[fa[u]]} \cap {x \ne u}}\frac{1+g[u]+f[x]}{deg[fa[u]]} $$
这个表示的就是一步走对的可能$+$走到自己父亲节点,需要一步返回的可能$+$走错儿子,需要一步返回的可能。
这个式子显然无法直接递推处理,因此需要化简一下,就成了:
$$ f[u]={deg[u]+\sum f_x}\ \ \ \ g[u]=g[fa[u]+deg[fa[u]]+\sum f_x $$
递推处理就好了。注意初始化问题:$f[1]=g[1]=0$以及$dfs$中的部分细节问题。
本题提醒我们:树上问题大多转化为$lca$问题,树形$dp$中$up-down$思想的贯彻导致统计答案的顺序很重要!
代码:Link
$Part_4:写在最后$
概率与期望的题单一共$18$题,做到这里想必也是很不容易。最后总结一下关于概率与期望的几句话吧。
- 先确定$dp$顺序,是正序$dp$还是倒序$dp$。
- 设状态很重要。一般地,好的状态能有好的初始状态和所求状态的表示,能够体现转移过程中变化的量。
- 灵活结合其它算法解决问题。如一般图中用高斯消元,树上用$up-down$思想的树形$dp$
-
勤思考,多写代码,培养强大的思维能力和代码能力,不要一味颓题解!
$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Thats\ End.\ on\ 2024.2.17$

浙公网安备 33010602011771号