这三天继续研究概率dp的题,首先做的是Hdu 4035 Maze这道题,题意是在一个树形迷宫中,以房间为节点。有n间房间,每间房间存在陷阱的概率为ki,存在出口的概率为ei,如果这两种情况都不存在(概率为pi),那么只能做出选择走向下一个房间也可能会走向上一个房间。根节点为1,当遇到陷阱时必须返回到根节点1处重新开始,当遇到出口时,走出迷宫。问从开始到走出迷宫所做出选择次数的期望值。
首先定义状态dp[i]表示在节点 i 处直到走出迷宫的选择次数期望值。
状态转移方程为dp[i]=ki*dp[1]+(1/m)*pi*和号(dp[son]+1)(i为叶子节点)
dp[i]=ki*dp[1]+(1/m)*pi*(dp[father]+1)+(1/m)*pi*和号(dp[son]+1)(i为非叶子节点)
化简得dp[i]=ki*dp[1]+(1/m)*pi*dp[father]+(1/m)*pi*和号dp[son]+pi 显然,dp[i]都与dp[1]有关,另dp(i)=A(i)*dp[1]+B[i]*dp[father]+C[i]
(1-(pi/m)*和号A[son])dp(i)=(ki+(pi/m)和号A[son])*dp[1]+(pi/m)*dp[father]+(pi/m)*C[son]+pi
dp[1]=C[1]/(1-A[1]) 即为答案。如果A[1]=1就是无解。
HDU 3853 LOOPS这个题,题意是迷宫是一个R*C的布局,每个格子中给出停留在原地,往右走一个,往下走一格的概率,起点在(1,1),终点在(R,C),每走一格消耗两点能量,求出最后所需要的能量期望。用dp[i][j]记录从i,j出发到终点所需期望,map[i][j][k],记录每格三种状况的概率,得递推公式dp[i][j]=dp[i][j+1]*mat[i][j][3]+dp[i+1][j]*mat[i][j][2]; dp[i][j]=dp[i][j]/(1-map[i][j][0])。最后得dp[1][1]为答案。
POJ 2151 Check the difficulty of problems这道题,题意是ACM比赛中,共M道题,T个队,p[i][j]表示第i队解出第j题的概率 问 每队至少解出一题且冠军队至少解出N道题的概率。先求每个人他一道题都不会做的概率,于1作差,得得到至少有一题的概率, 再求至少做出N题的概率, 用dp[k][i][j]表示k个人前i题做出了j题的概率,用p[k][i]为第k个人做出了第i题的概率那么状态转移方程就是dp[k][i][j]=dp[k][i-1][j]*(1-p[k][i])+dp[k][i-1][j-1]*p[k][i]。
Codeforces 148D Bag of mice这道题,题意是一个袋子里面有w个白色老鼠,b个黑色老鼠。公主和龙每一轮从袋子中随机选出一个老鼠,不放回。谁先选到白色老鼠谁获胜,然后龙每一次从袋子中选老鼠的时候,会随机从袋子中跑掉一个老鼠。如果两个人都没有人选到白色老鼠,龙获胜。公主先选。问公主赢的概率。
用dp[i][j]表示现在轮到王妃抓时有i只白鼠,j只黑鼠,公主赢的概率。
首先dp[0][0]=0,dp[i][0]=1,dp[0][i]=0,dp[i][1]=i/(i+1)。
状态转移方程dp[i][j]=i/(i+1)+j/(i+j)*(j-1)/(i+j-1)*((j-2)/(i+j-2)*dp[i][j-3]+i/(i+j-2)*dp[i-1][j-2])。
最后dp[w][b]为答案。
然后请假五天,下一周星期四星期五考试,要准备一下。