UVa11427 Expect the Expected

数学期望 概率递推

每一天的概率都是独立且相同的。可以先推出每天打i盘赢j盘的概率f[i][j]

f[i][j]=f[i-1][j]*(1-p) + f[i-1][j-1]*p

    输          赢

设此人打一天胜率不满足要求的概率为p

那么打一天的概率是1*p

打两天的概率是1*p*(p^2)

以此类推

----

题解待施工 

学自http://www.cnblogs.com/neopenx/p/4282768.html

----

WA点:

  1、a和b用double存,可能引起了精度误差。

  2、输出没换行

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #include<vector>
 8 using namespace std;
 9 const int mxn=110;
10 int n;
11 double f[mxn][mxn];
12 int main(){
13     int T;int i,j,a,b,cas=0;
14     scanf("%d",&T);
15     double p;
16     while(T--){
17         memset(f,0,sizeof f);
18         scanf("%d/%d%d",&a,&b,&n);
19         p=(double)a/b;
20         f[0][0]=1;
21         f[0][1]=0;
22         for(i=1;i<=n;i++){
23             f[i][0]=f[i-1][0]*(1-p);
24             for(j=1;j*b<=i*a;j++){
25                 f[i][j]=f[i-1][j]*(1-p)+f[i-1][j-1]*p;
26             }
27         }
28         double res=0.0;
29         for(i=0;i<=n;i++)res+=f[n][i];//
30         double ans=1/res;
31         printf("Case #%d: %d
",++cas,(int)ans);
32     }
33     return 0;
34 }
原文地址:https://www.cnblogs.com/SilverNebula/p/6252988.html