数学期望dp

dp求数学期望时往往是在上一个状态求完期望后,加上新状态的要求再求期望,但每次求dp时所乘的所有概率要等于1

https://www.cnblogs.com/hua-dong/p/8166093.html

  • 数学期望 P=Σ每一种状态*对应的概率。
  • 因为不可能枚举完所有的状态,有时也不可能枚举完,比如抛硬币,有可能一直是正面,etc。在没有接触数学期望时看到数学期望的题可能会觉得很阔怕(因为我高中就是这么认为的,对不起何老板了QwQ),避之不及。 但是现在发现大多数题就是手动找公式或者DP推出即可,只要处理好边界,然后写好方程,代码超级简短。与常规的求解不同,数学期望经常逆向推出。
  • 比如常规的dp[x]可能表示到了x这一状态有多少,最后答案是dp[n]。而数学期望的dp[x]一般表示到了x这一状态还差多少,最后答案是dp[0]
  • 经典的期望dp
  • 题目大意


      一个N面骰子,问把每一面都至少掷出一次期望次数是多少?


    input


      2 
      1 
      12


    output


      1.00 
      37.24


    idea


      一开始的时候,一直在想扔出一面的期望是1,扔出两面的期望是(1 - 1/n) * 2, 扔出三面的期望是(1 - 2 / n) * 3 ….试了试样例,发现不对。 
      正确的应该是4/4 + 4/3 + 4/2 + 4/1,假设n是4的话。 
      首先扔第一面的时候,是1这个没有问题。 
      扔第二面的时候,期望是3/4,因为对于第二次扔,可能1次扔中,2次扔中,3次扔中…无穷多次扔中。 
      这个时候的期望就是(1 + 1/4 + 1/4 * 1/4 + 1/4 * 1/4 * 1/4 + …) 其实这里的每一项都是1/4 * 1 * 1/4 * 1 * 1/4 * 1的,好好理解一下,然后这个就是等比级数。 
      等比级数的求和公式: 
      当| r |  < 1 时,limx→∞ Sn = a1 / (1 - r) 此时等比级数收敛。 
      所以最终结果就是∑(n / i)
      
      上面是理性推出来的做法 
      看了另一种做法就是概率dp,发现这个东西真的好厉害的 
      我觉得对于这种可以做无穷多次的,就是要想到这种dp的思想 
      dp[i]表示已经有了i种需要有的状态推到最终状态需要的期望次数,即求扔出(n-i)个面时的期望
      很显然dp[n] = 0。 
      然后开始逆推。对于当前的状态,如果在做一次操作,要么保持原有的状态dp[i],这种概率是i/n,要么出现新的一种状态,这种概率是(n - i) / n. 
      dp[i] = i / n * (dp[i] + 1) + (n - i) / n * (dp[i  + 1] + 1);    //在扔了i个面的基础上再扔一次 比dp[i+1]还要再多扔出一个面.又由于选第i个数后再选一个数与已经选过的数不同的概率为(n−i)/n,相同为i/n
      化简下就ok,dp[0]就是答案。
    --------------------- 
    作者:deerly_ 
    来源:CSDN 
    原文:https://blog.csdn.net/deerly_/article/details/82708680 
    版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/weixin_42165786/article/details/89280413