LightOJ1030-Discovering Gold

来源:互联网 发布:机器人姿态矩阵 编辑:程序博客网 时间:2024/05/13 06:51

Discovering Gold


题意:投掷一枚骰子,假设正面向上的数值为 x,当前位置为 i , 每次走 min (x,N - i) 步,每到一个格子会得到相应的黄金数,求走完长度为 N 的格子的到黄金的期望。

解题思路:E[ i ] 表示当前位置在 i 处 获得的期望,则有 E[ i ] = ( E[ i +1 ] + E[ i + 2] +……+E[ i + 6] )/ 6 + gold[ i ] ;而当 N - i < 6 时 需要特殊处理。


#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <queue>#include <cmath>#include <vector>#include <set>#include <bitset>#include <stack>#include <map>#include <climits>#include <functional>using namespace std;#define LL long longconst int INF=0x3f3f3f3f;const double eps=1e-8;double dp[105];int main(){    int t,n,a[105],cas=0;    scanf("%d", &t);    while(t--)    {        scanf("%d", &n);        for(int i = 1; i <= n; i++)            scanf("%d", &a[i]);        memset(dp, 0, sizeof(dp));        dp[n]=a[n];        for(int i=n-1;i>0;i--)        {            dp[i]=a[i];            int  k=min(6,n-i);            for(int j=1;j<=k;j++)                dp[i]+=dp[i+j]/k;        }        printf("Case %d: %.10lf\n",++cas,dp[1]);    }    return 0;}

0 0