题目链接

题意 : 一个m面的骰子,掷n次,问得到最大值的期望。

思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn)

p(xi)的是所有最大值是xi的情况数/总情况数一共是m^n种,掷n次,所有最大值是xi的情况数应该是xi^n,但是这里边却包含着最大值非xi且不超过xi的种数,所以再减去最大值是xi-1或者最大值不超过这个的情况数。即sum += xi * (xi^n-(xi-1)^n)/m^n,但是这样求肯定是不行,因为m n 的取值范围是10^5所以100000^100000会溢出,将这个公式的m^n提到括号里,即变成sum += xi*((xi/m)^n-((xi-1)/m)^n)。

 1 //C. Little Pony and Expected Maximum
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <cmath>
 6 
 7 using namespace std ;
 8 
 9 int main()
10 {
11     double m , n ;
12     while(~scanf("%lf %lf",&m,&n))
13     {
14         double sum = 0.0;
15         for(int i = 1 ; i <= m ; i++)
16         {
17             sum += (pow(i/m,n)-pow((i-1)/m,n))*i ;
18         }
19         printf("%.12lf\n",sum) ;
20     }
21     return 0 ;
22 }
View Code

 

posted on 2014-08-05 09:38  枫、  阅读(168)  评论(0编辑  收藏  举报