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 }

 

你可能感兴趣的:(HDU)