HDU4405 期望

对于期望,首先,对于这个公式中p表示概率,x表示随机变量

展开则为 ex= p1*x1+p2*x2+p3*x3.......

对于本题 假设 ex[ i ]表示当前 i 走到 n 的期望值。所以若 i 处没有飞机,ex[ i ]=sigma(1/6*ex[i+k])+1 其中(k=1...6) (+1表示掷了一次骰子) 若 i 处有飞机,则直接等于 ex[ j ]

结果则为 ex【0】

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn = 100005;
 6 int fly[ maxn ];
 7 double ex[ maxn ];
 8 int main(){
 9     int n,m;
10     while( scanf("%d%d",&n,&m)!=EOF ,n+m ){
11         for( int i=0;i<=n;i++ ){
12             ex[ i ]=0;
13             fly[ i ]=-1;
14         }
15         for( int i=0;i<m;i++ ){
16             int a,b;
17             scanf("%d%d",&a,&b);
18             fly[a]=b;
19         }
20         ex[ n ]=0;
21         for( int i=n-1;i>=0;i-- ){
22             if( fly[i]!=-1 ){
23                 ex[ i ]=ex[ fly[i] ];
24             }
25             else {
26                 for( int j=1;j<=6;j++ ){
27                     if( i+j>=n )
28                         ex[ i ]+=((1.0/6.0)*ex[ n ]);
29                     else
30                         ex[ i ]+=((1.0/6.0)*ex[ i+j ]);
31                 }
32                 ex[ i ]+=1.0;
33             }
34         }
35         printf("%.4lf\n",ex[ 0 ]);
36     }
37     return 0;
38 }
keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2939293.html