LightOJ1030 Discovering Gold

题目链接:https://vjudge.net/problem/LightOJ-1030

知识点:  概率与期望

解题思路:

  设某一个点 \(i\) 能到达的点的个数为 \(x\),其上有金 \(g\),则该点上的期望 \(f(i) = g + \frac{f(i+1) + f(i+2) + ... + f(i+x)}{x}\).

AC代码:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 const int maxn = 100+5;
 5 double dp[maxn];
 6 
 7 int main(){
 8     int T,N;
 9     scanf("%d",&T);
10     for(int t=1;t<=T;t++){
11         scanf("%d",&N);
12         for(int i=1;i<=N;i++)   scanf("%lf",&dp[i]);
13         for(int i=N;i>0;i--){
14             int lim=min(N-i,6);
15             double tmp=0;
16             for(int j=1;j<=lim;j++)
17                 tmp+=dp[i+j];
18             if(lim)
19                 dp[i]+=tmp/(double)lim;
20         }
21         printf("Case %d: %lf\n",t,dp[1]);
22     }
23     return 0;
24 }

 

posted @ 2018-03-05 22:54  Blogggggg  阅读(140)  评论(0编辑  收藏  举报