zoukankan      html  css  js  c++  java
  • 概率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]。

    sgu 495

    有n个奖品放在n个盒子里。有m个小朋友随机去选择一个盒子,若有奖品则拿走。不管有没有奖品都要将空盒子放回去。

    问最后获得奖品的期望。


    以n个奖品为对象考虑,m个人的选择是相互独立的。那么对于一个奖品被选择的p = 1- ( (n-1)/n)^m。

    那么该奖品被选择的期望是p*1,那么总的获奖的期望是p*n。

    hdu 4652

    非常好的题目。掷一枚骰子,有m个面。问掷出连续出现n个同样的面以及连续出现n个前后两两不同的面的期望。

    dp【i】表示已有i个面同样/两两不同。

    终态dp[n] = 0。对于出现n个连续同样的面dp[i] = 1/m * dp[i+1] + (m-1)/m*dp[1] + 1,出现两两不同的面dp[i] = (m-1)/m * dp[i+1] + 1/m * (dp[1] + dp[2] + ...+ dp[i])。求出dp[0]。

    主要是对式子的化简。它们都涉及到i和i+1前后两项。再列出dp[i+1]的表达式然后联立,发现两两前后两项的差值成等比数列。

    hdu 4035

    这道题真心不好推。非常明显是在树上求概率,必然不存在环。

    dp[i]表示在i号房间走出去的期望,那么对于叶子节点是非常好推的,它仅仅有一个父亲,dp[i] = ki * dp[1] + ei * 0 + (1-ki-ei) * ( dp[fa[i]] + 1)。对于非叶子节点,dp[i] = ki * dp[1] + ei * 0 + (1-ki-ei)/m * (∑dp[ son[i] ] + dp[ fa[i] ] + 1) 。发现dp[i]和fa[i]和son[i]有关系,i与fa[i]是父子关系。son[i]与i也是父子关系。能够消掉一个,设dp[i] = A[i] * dp[1] + B[i] * dp[fa[i]] + C[i],代入上式就能够把son[i]消掉,变为一个关于A[i],B[i]和C[i]的表达式,通过递推就能求出dp[1]。


    高斯求期望:

    hdu 4418

    有个人在时间轴上。它起初有个方向。它等概率的向前走1~m步,当到达终点再返回,朝相反方向走。问到达x点要走步数的期望。dp[i]表示在i点处时到达终点的期望步数。那么可列出转移方程dp[i] = ∑( pk * (dp[ (x+k)%n ] +k) ),

    注意当中有些点不会到达,须要bfs预处理一下。然后高斯求期望。

    ZJUT 1423

    比較简单的期望。状态转移方程非常好想,dp[i]表示在i点时到达终点要走的期望步数。那么dp[i] = ∑1/m*dp[j] + 1,j是与i相连的点。m是与i相邻的点数,建立方程组求解。

    和上题一样,会存在到达不了的点,须要bfs预处理,进行离散化。

  • 相关阅读:
    关于gitlab怎样merge request的流程
    有访问权限的gitlab如何把上面的代码clone到本地
    macpro终端打开mysql
    Hbase实验:java创建和删除table
    齐次递推式拆数学式
    一些生成函数
    圆锥表面曲线方程
    扩展欧拉降幂
    scanf读入有空格字符串
    线性筛素数的一个用途
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5196625.html
Copyright © 2011-2022 走看看