码迷,mamicode.com
首页 > 其他好文 > 详细

概率dp总结

时间:2014-10-14 00:27:27      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:概率dp

概率:

poj 2151

有t个队伍,m道题,给出每个队伍做出每道题的概率。求出每个队伍至少做出一道题并且冠军队伍至少做出n道题的概率。

每个队伍至少做出一道题的对立事件是每队至多做出0道题,所以需要求出每对做出0道的概率。

冠军队伍至少做出n道题的概率的对立事件是所有队最多做出n-1道,所以需要记录每个队最多做出x道的概率。

那么可以设s[i][j]表示i队最多做出j道题的概率。那么还需要用dp[i][j][k]表示第i队在前j道题中做出k道题的概率。

找出对立事件就简单了。


poj 3744

有n个雷,某人的起始位置在1,每次走一步的概率为p,走两步的概率是1-p,给出n个雷的位置,问最后成功走出雷区的概率。

成功走出雷区说明每个雷区都没有踩到,那么只需求出每个雷区都没踩到的概率相乘。没踩到第i个雷区的概率是1-踩到第i个雷区的概率。可以将雷区分段1~num[1],num[1]+1~num[2]......每一段都只有一个雷num[i],每一段都是和第一段相同,dp[i]表示在i点的概率,那么dp[i] = dp[i-1]*p + dp[i-2]*(1-p)。特别注意这里的i是每一段的起始位置,每一段的第一个位置是一定要走的,dp【1】 = 1。

CF D

也是一道概率,不过需要逆推,准确找出状态的转移。

设有i只白鼠j只黑鼠的状态下王妃获胜的概率是dp[i][j],这种状态可由一下三种状态得到:

王妃第一次就取得一只白鼠获胜,概率为i/(i+j);

王妃没有取到白鼠,取黑鼠的概率是j/(i+j),若王妃要赢,下次龙一定取黑鼠,概率为(j-1)/(i+j-1),同时跑掉的是黑鼠,概率为(j-2)/(i+j-2),状态转移到dp[i][j-3];

王妃没有取到白鼠,取黑鼠的概率是j/(i+j),若王妃要赢,下次龙一定取黑鼠,概率为(j-1)/(i+j-1),同时跑掉的是白鼠,概率为i/(i+j-2),状态转移到dp[i-1][j-2];



期望:

hdu 4586 

一个骰子有n个面,每个面上都有相应钱数,当掷到其中m个面上时就会增加一次机会。问最后得到钱数的期望。

这个题想复杂了,不知道终态怎么确定。其实只需要考虑投掷一次的情况,投掷一次的期望是p = sum/n,但是若投掷到m个面中的一个,就会又多一次机会,第二次投掷的情况和第一次是完全相同的,那么投掷第二次的期望就是m/n*p,依次类推,投掷N次的期望就是(m/n)^(N-1)*p。这些期望之和就是答案,可以看出N项是等比数列,极限求和。

poj 2096 期望入门题

程序的bug有n个子集,s个种类。每一个bug属于每个子集的概率为1/n,每一个bug属于每个种类的概率为1/s,问每个子集且每个种类都有bug的期望。

列出状态转移方程就就解决了。

hdu 3853

求从【1,1】到【r,c】的所花power的期望,每走一步消耗的power是2,给出从[i,j]到[i,j],[i,j+1],[i+1][j]概率。

也是简单的期望,逆推即可。特别注意在原点不动的概率为1时,根本走不到【r,c】。

hdu 4405

有n+1个点,0~n ,某人现在站在x处,若x处有flight lines,他就能飞到相应点而不用掷骰子,否则就向前走掷出的骰子上的数字。问他从0点到达n点需要投掷骰子的平均次数。

确定终态dp[n] = 0,然后逆推,共有两种情况,掷骰子和不掷骰子。

hdu 4336

有N种卡片,每一袋零食里面最多有一张卡片,给出一袋零食里面每种卡片的概率,问平均要买多少袋零食能收集到所有的卡片。

N <= 20,状态压缩一下,确定终态dp[(1<<n)-1] = 0,特别注意p1+p2+...+pN<=1,说明一袋零食中会有一张卡片也没有的情况。

状态压缩一下,共有1<<n-1个状态,设dp[sta]表示当前状态到目标状态平均买的零食数目,已知终态dp[1<<n-1] = 0,dp[sta]可由一下状态得到:

这一袋零食里没有卡片,概率为p(没有一张卡片的概率),状态转移到sta;

这一袋零食里面有卡片j,但是他已经拥有这种卡片,概率是a[j],状态转移到sta;

这一袋零食里面有卡片j,且是以前没有过的,概率是a[j],状态转移到sta | ( 1 << j )

zoj 3640

类似的题型。有一个吸血鬼被困了,有n条路可以逃出去,每条路有一个难度c[],他初始的战斗力是f,对于第i条路,若f > c[i]他花t[i]天就能出去,否则,他就停留一天,同时战斗力增加c[i]然后再选一条路走出去,他走每条路的概率是相同的。问他逃出去的天数的期望。

设dp[i]表示在战斗力为i时逃出去的期望值,那么可推出状态方程 dp[i] = 1/n * t[j](c[j] > i),dp[i] = 1/n * (1+dp[ i+c[j] ] )( c[j] <= i)。易忽略的点是终态的确定,应该是MAX*2。因为i+c[j]很有可能大于MAX。

zoj 3329

很好的题目。有3个骰子,分别有a,b,c个面,每个面等概率。当前状态i,当三个面分别掷出k1,k2,k3时回到状态0,否则到达状态i+k1+k2+k3,问投掷出>=n时投掷的次数的期望,状态转移方程很好推,dp[i]=p0*dp[0]+pk*dp[i+k],仔细分析这个等式与上面的等式有所不同,它含有要求的量dp[0],出现了环。发现每个等式都可以用dp[0]表示出来,那么设dp[i]=A[i]*dp[0]+B[i],带入上式可以得到A[i]和B[i]的递推式,那么由A[0]和B[0]就能求出dp[0]。



概率dp总结

标签:概率dp

原文地址:http://blog.csdn.net/u013081425/article/details/40049835

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!