期望(二)—— 概率与期望 DP 学习笔记

来源:互联网 发布:ftp打开的端口号 编辑:程序博客网 时间:2024/06/05 02:43

概率与期望 DP 总结 —— By sengxian

我们来跟着这篇博客来学习一下好辣。
只会给出一些自己的理解。


例一 BZOJ 3036

方法一:直接定义期望状态

全期望公式:E(Y)=nP(X=xi)E(Y|X=xi)

这道题的终点很明确,那就是走到 n 即停止。对于期望 DP,我们一般采用逆序的方式来定义状态,即考虑从当前状态到达终点的期望代价。因为在大多数情况下,终点不唯一,而起点是唯一的。

这个逆序的应用还是很巧妙的。最后输出应该是 dp(1)
考虑一个点的答案是由后继点的答案得到的,而且我们要的是第一个点的答案,而 n 号点的期望值肯定是 0
很显然我们应该从后往前推导
所以边就建成反边
为了在一张图里面倒推,而且还是 DAG,很容易想到拓扑序
就倒着用拓扑序逆推就好了

方法二:利用期望的线性性质

根据期望的线性性质,E(X+Y) = E(X) + E(Y)。所以另外一种求期望的方式是分别求出每一种代价产生的期望贡献,然后相加得到答案。

因为这种方法计算答案十分的便捷,而且适用范围广,所以这种『利用期望的线性性质,单独计算贡献的方法』是我们计算期望首选的方法。


例二 Codeforces 518D

方法一:直接定义期望状态

在本题这样一个情况中,方法一是用不了的,因为我们的结束状态不明确

方法三:使用期望的定义计算

方法二:利用期望的线性性质

延续方法三的 DP,我们不妨将状态之间的转移抽象成边,只不过只有 dp(i, j)dp(i + 1, j + 1) 的边才有为 1 的边权,其余都为 0
因为这个 DP 涵盖了所有可能出现的情况,所以我们仍然可以利用期望的线性性质,在刷表的过程中进行计算答案。


例三、例四

因为状态太多,那么就可以根据期望的线性性质,单独算每一个字符的贡献。


总结

(请看这里!↓

期望 DP 一般来说有它固定的模式。
一种模式是直接 DP,定义状态为到终点期望,根据全期望公式等,通常采用逆序计算得到答案。
一种模式是利用期望的线性性质,对贡献分别计算,这种模式一般要求我们求出每种代价的期望使用次数,而每种代价往往体现在 DP 的转移之中。
还有一种模式是可以直接使用期望的定义计算。
最后的两个例题是典型的分离变量,用期望的线性性质计算答案的例子,如果状态过于巨大,那么就得考虑分离随机变量了。