LightOJ - 1030 Discovering Gold【期望dp】

LightOJ - 1030 

思路:

dp[i]表示在i位置时,以后可以获得的金子的期望值。

假设往后可以走6步,那么E(i)=(E(i+1)+E(i+2)+E(i+3)+E(i+4)+E(i+5)+E(i+6))/6+val(i);


代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define inf 0x3f3f3f3f
#define MAXN 50005
#define ll long long
int n;
double dp[105];
int main()
{
    int t;
    scanf("%d",&t);
    for(int tt=1;tt<=t;tt++)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lf",&dp[i]);
        for(int i=n-1;i>0;i--)
        {
            double sum=0;
            int k=min(6,n-i);
            for(int j=i+1;j<=i+6 && j<=n;j++)
            {
                sum+=dp[j];
            }
            dp[i]+=sum/k;
        }
        printf("Case %d: %.7f\n",tt,dp[1]);
    }
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u013852115/article/details/80600798