对于期望,首先,对于这个公式中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 }