您的位置:首页 > 其它

CodeForces 453A(数学期望)

2015-10-23 15:27 260 查看

题目链接:CodeForces 453A

题目大意


给你一个n面的骰子,投掷m次,问投得最大面的数学期望。



数学期望的由来


数学期望,早在17世纪,有一个赌徒向法国著名数学家帕斯卡挑战,给他出了一道题目:甲乙两个人赌博,他们两人获胜的机率相等,比赛规则是先胜三局者为赢家,赢家可以获得100法郎的奖励。当比赛进行到第三局的时候,甲胜了两局,乙胜了一局,这时由于某些原因中止了比赛,那么如何分配这100法郎才比较公平?用概率论的知识,不难得知,甲获胜的概率为1/2+(1/2)*(1/2)=3/4,或者分析乙获胜的概率为(1/2)*(1/2)=1/4。因此由此引出了甲的期望所得值为100*3/4=75法郎,乙的期望所得值为25法郎。这个故事里出现了“期望”这个词,数学期望由此而来。



概念:数学期望是试验中每次可能结果的概率乘以其结果的总和。



本题求最大面的数学期望,那么关键就在求出最大面的概率。

不难推出, 假设所求是最大面为 i ,则我们可以求出 面为 1 ~ i - 1 的所有组合 , 即 (i-1) ^ n种 ,相应的 1 ~ i的所有组合 有 (i)^n种,

所以最大面出现的组合数为i^n - (1-i)^n,求出这个期望就好求了,每种情况的概率都为 pow (1/m,n);



源代码

#include<stdio.h>
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
double ans = 0;
double now = 0,pre = 0;
for(int i=1;i<=n;i++){
now = (pow((double)i/n,m));
ans += (now - pre)*i; //乘以对应的i ,求期望
pre = now;
}
printf("%.12f\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: