概率与期望 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 的转移之中。
还有一种模式是可以直接使用期望的定义计算。
最后的两个例题是典型的分离变量,用期望的线性性质计算答案的例子,如果状态过于巨大,那么就得考虑分离随机变量了。