题意 : 一个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)。
//C. Little Pony and Expected Maximum
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath> using namespace std ; int main()
{
double m , n ;
while(~scanf("%lf %lf",&m,&n))
{
double sum = 0.0;
for(int i = ; i <= m ; i++)
{
sum += (pow(i/m,n)-pow((i-)/m,n))*i ;
}
printf("%.12lf\n",sum) ;
}
return ;
}