zoukankan      html  css  js  c++  java
  • bzoj 1426:收集邮票 求平方的期望

      显然如果收集了k天,ans=k*(k+1)/2=(k^2+k)/2.那么现在要求的就是这个东西的期望。

      设f[i]表示已有i张邮票,收集到n张的期望次数,g[i]表示已有i张邮票,收集到n张的次数的平方的期望。

      显然i这个点有 $frac{i}{n}$ 的概率走自环,有 $frac{n-i}{n}$ 的概率走到i+1这个点。

      SO $$f[i]=(frac{i}{n}) imes(f[i]+1)+(frac{n-i}{n}) imes(f[i+1]+1)$$

      以前一直不懂平方的期望是怎么求的,今天终于证了一发。$$E((x+1)^2)=sum_{i=0}^infty P(i)*(i+1)^2$$

      因为P后边的那个式子是一个具体的值所以可以拆开。

      $$E((x+1)^2)=sum_{i=0}^infty P(i)*(i+1)^2=sum_{i=0}^infty P(i)*(i^2+2i+1)=sum_{i=0}^infty P(i)*(i^2)+2 imessum_{i=0}^infty P(i)*(i)+1=E[x^2]+2E[x]+1$$

      其中倒数第二步是根据期望的线性可加性得来。

      这样x^2的期望就可以由(x-1)^2的期望推来。

      所以g[i]和f[i]同理:设s[i]表示在从i点出发走了s[i]步后结束,g[i]=E(s[i]^2)。

      $$g[i]=(frac{i}{n}) imes E((s[i]+1)^2)+(frac{n-i}{n}) imes E((s[i+1]+1)^2)$$

      $$g[i]=(frac{i}{n}) imes(g[i]+2 imes f[i]+1)+(frac{n-i}{n}) imes(g[i+1]+2*f[i+1]+1)$$

      最后化简一下递推就行了。

      

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #define N 100005
     6 using namespace std;
     7 double f[N],g[N];
     8 int main()
     9 {
    10     int n;
    11     scanf("%d",&n);
    12     f[n]=0;g[n]=0;
    13     for(int i=n-1;i>=0;i--)
    14     {
    15         f[i]=f[i+1]+(double)n/(n-i);
    16         g[i]=g[i+1]+2.0*f[i+1]+2.0*i/(n-i)*f[i]+1.0*n/(n-i); 
    17     }
    18     printf("%.2lf
    ",(g[0]+f[0])/2);
    19     return 0;
    20 }

     

     

     

  • 相关阅读:
    JQuery操作元素的属性与样式及位置 复制代码
    【转】从零开始编写自己的C#框架
    一步一步Asp.Net MVC系列_权限管理设计
    ASP.NET MVC5 网站开发实践
    MVC5+EF6 入门
    ASP.NET中使用JqGrid完整实现
    技术是容易学会的(Copy)
    Oracle 创建用户并且授权
    python安装zlib一直无效
    linux ln 命令(转载)
  • 原文地址:https://www.cnblogs.com/ezyzy/p/6475861.html
Copyright © 2011-2022 走看看