zoukankan      html  css  js  c++  java
  • dp:概率与期望

    若某事件发生的概率为P,则期望为1/P。

    题目链接:https://vjudge.net/contest/222921

    密码:ECJTUACM

    A:

    有若干个传送门,你会随机选择其中一扇,值为a的传送门会让你在a分钟后离开, 值为-a的传送门会让你在a分钟后回到起点,求离开的期望时间。

    若能离开的传送门数为a1,不能离开的传送门数为b1。

    传送离开的概率为a1/(a1+b1)。

    则离开的期望传送次数为(a1+b1)/a1次。

    求出每次传送的平均时长,与期望传送次数相乘即可。

    题目要求输出最简分数,用gcd处理一下即可。

     

     

    B:

    有编号为1到n的金矿,你现在在1号,你可以挖掘你所在金矿的金子。

    你掷一个六面骰子来决定你移动的步数,如果骰子的结果超过n,则重掷。

    求挖到金矿总量的期望。

    某金矿的期望值会取决于下一次能到达金矿的平均期望:

    a[i]+=1/6*a[i+1]+ 1/6*a[i+2]+……+1/6*a[i+6]

    所以要从大到小处理。

    如果上限超过n,则做出对应调整。

     

    为什么要从后往前推,解释如下:

    先举个反例:

    假如我们令方程为

    a[i]+=1/6*a[i-1]+ 1/6*a[i-2]+……+1/6*a[i-6]

    a[2]=a[1]+a[2]

    a[3]=0.5a[1]+0.5a[2]+a[3]=a[1]+0.5a[2]+a[3]

    那么

    a[4]=1/3a[1]+1/3a[2]+1/3a[3]+a[4]=a[1]+0.5a[2]+1/3a[3]+a[4]

    然而实际上a[4]的期望并不是这样。

    如果1到4

    1开始,到2的概率为1/3,到3的概率为1/3加上2到3的概率,为0.5。

    所以正确的是a[4]=a[1]+1/3a[2]+0.5a[3]+a[4],与正推矛盾。

    为什么正推会错?看到a[2]这里,a[2]认为,a[1]只能到a[2],你从a[2]的角度看,a[2]的来源只有a[1],这是没错的,但状态转移方程还会额外认为a[1]只能到a[2];a[3]认为a[1],a[2]只能到a[3],产生了后效性,这就是致命的逻辑错误。

     

    为什么a[i]到a[i+1]—a[i+6]是对的?

    因为逻辑完整,无后效性。

    因为a[i]发散到后六个位置的概率,就是掷一个骰子掷出某个数的概率。

    而前六个位置收束到一个位置,是掷六个骰子,第一个掷出6,第二个掷出5……,第六个掷出1的概率,看上去每次好像都是1/6,但每一个状态实际上都是不相关的,所谓的正推转移方程只是看上去对的伪命题。

     

     

    C:

    一个数随机除它的任意一个因数,直到结果为1,求要除的期望次数。

    与上题不同,某个数除到1的期望取决于比它小的数的期望,所以从小到大处理。

    a[i]=(a[1]+1+a[x2]+1+a[x3]+1+……+a[xn]+1+a[i]+1)/(因数个数)

    注意,因数是包括1和本身的,不能忽略。

    由于题目数据很大,要预处理出所有结果。

    并且处理要使用一点技巧节省时间。

     

     

    D:

    01背包的期望版

    劫匪想抢银行,他不希望被捕概率超过p的情况下获得最多的金钱。

    每间银行有金钱和被捕概率pi。

    概率求法:

    P=1-(1-p1)*(1-p2)*(1-p3)*……*(1-pn)

    后面连乘算出不被捕概率,减去得到被捕概率。

     

     

    E:

    掷一个n面骰子,求每个面都出现一次要掷的期望次数。

    m面未出现过,则掷出未出现面的概率为m/n。

    则出现一个之前没出现的面期望次数为n/m。

    m为1到n再对期望求和。

     

     

    F:

    在一个三维空间内均匀分布着关着的灯,随机选取k次,一次选取两个点,将两个点内所有的灯的开关按一次,问最后亮着的灯的期望数目。

     

    也就是求开关被按奇数次的灯的期望数目。

    对于坐标为(x,y,z)的点,

    其在x轴上被选中的概率为(n*n-(x-1)*(x-1)-(n-x)*(n-x))/n*n

    由次三重循环求出每一个位置被按到的概率p。

    对于p,我们要求出该位置改变奇数次的概率。

    f[i]为i次后,该位置为暗,g[i]为i次后,该位置为亮

    f[i]=(1-p)*f[i-1]+p*g[i-1]

    gi]=(1-p)*g[i-1]+p*f[i-1]

    已知边界f[0]=1,g[0]=0

    我们算出g[k]即可,可以直接用矩阵算。

    当然也可以推导,推导的结果为

    ans+=0.5*(1-pow(1-2*p,1.0*k));

     

     

    G:

    期望版最长路,迪杰斯特拉或Floyd都可以求解

     

     

    H:

    你是瞎子,有两种棍子,一种拿过后可以扔出去,另一种不能。

    每根棍子有重量,要求你拿过所有棍子,求你拿过棍子的期望重量总和。

    扔出去的棍子只会拿一次,所以其贡献的期望是1*重量。

    不能扔出去的棍子类似前面的n面骰子,我们可以轻易知道拿出一根之前没摸过的概率和期望次数,再乘上重量即可。

     

     

    I:

    你接不住下一球的概率为p,如果连接k1球或连空k2球时结束,求发球的期望次数

    f[i]为连接中i球时还要发球的期望次数,g[i]为连空i球时还要发球的期望次数。

    f[i]= (1-p) *(f[i+ 1]+1)+ p *(g[1]+1)=(1-p)*f[i+1]+p*g[1]+1

    意思为(1-p)的概率接到,此时期望为f[i+1]加上这一球,所以+1,p的概率空,那么相当与连空1球的期望加上这一球,所以+1.

    g[i]= p *(g[i+ 1]+1)+ (1-p) *(f[1]+1) =p*g[i+1]+(1-p)*f[1]+1

    边界f[k1]=0,g[k2]=0

    q=1-p

    可以推出f[1]=(1-q^(k1-1))*(p*g[1]+1)/(1-q)

    g[1]=(1-p^(k2-1))*(q*f[1]+1)/(1-p)

    答案为f[0]或g[0]

     

     

    J:

    不会,嘤嘤嘤。

  • 相关阅读:
    [译]Angular2 和TypeScript -- 一次简要的预览
    浅谈沟通技巧
    浅谈面试官的“被面试”技能
    2020个人总结
    浅谈任务委托与团队建设
    2020已读书单
    2019年个人总结
    目标分析与制定算法
    X短期项目总结
    寻求改变
  • 原文地址:https://www.cnblogs.com/qq936584671/p/8985804.html
Copyright © 2011-2022 走看看