[学习笔记]概率与期望dp做题总结

之前做的一些就不记录了,只记录现在开始做的一些题。

T0. 入门题

给一个有向无环图,每次等概率走某一条边,求从1走到n的边权和的期望。

做法1,直接设dp[x]表示答案,转移显然。

做法2,考虑从定义入手分析出一种做法。期望的定义是E=sigma Pi*Wi,就是Wi出现的概率乘上他自己。

本题中即Answer(G) = simga { P(p_i)*W(p_i) },p_i表示一条路径,P(p_i)表示走p_i的概率,显然有:

P(p_i)=1/|p|,其中p是路径集合,|p|是其大小。现在P(p_i)有了,W(p)呢?

注意到若将路径p_i写成边的有序序列p_i = ,并设w(e)表示e的边权,有:

W(p_i)=sigma { w(e_j) } , 1<=j<=|p_i|。代入Answer(G)可知Answer(G) = sigma { sigma { w(e_j) } / |p| } = sigma { sigma { w(e_j) } } /|p|。

其中第一层sigma枚举的是路径,第二层枚举的是路径上的边。显然答案会是一个边权乘上他在式子中出现的次数,求和,再除以|p|.

记边i的系数是a_i,即Answer(G) = sigma { a_i * w(e_i) /|p| }。

考虑a_i的计算,这等价于有多少路径经过边e_i,显然这等价于有多少条路径经过这条边的起点u。这个是可以递推的。

T1. cf518D

大意,有一个队列。每一个时刻有p的概率弹出队首元素,(1-p)的概率啥事也不做。求T秒后弹出队列的元素期望。

两种做法,第一种,注意到仅仅设dp[t]表示答案是不行的,因为并不能递推。

考虑令dp[i][j]表示前i秒恰好j个元素弹出的概率(即第i秒弹出第j个元素),那么答案看起来就应该是

sigma dp[i][j]*j。(尽管不是,但是也差不多了,只差了一些细节)

这个转移看起来是显然的,即你枚举上一次弹出的时刻,然后中间乘起来即可,这个转移需要优化;

但其实有一个更简单的转移方法,即设f[i][j]表示前i秒弹出j个人但并不要求第j个是第i个弹出的;

那么显然有f[i][j]=p*f[i-1][j-1]+(1-p)*f[i-1][j],然后dp[i][j]=p*f[i-1][j-1]。

计算答案的时候分两种情况,第一种是在t秒内弹出全部的n个元素,答案是sigma dp[i][n]*n

第二种是在i(i

两部分相加即可。

做法2,待补。

你可能感兴趣的:(概率与期望,DP动态规划,学习笔记)