https://vjudge.net/contest/245766#problem/B
求从1走到n所获的金子数量的期望,刚开始在1位置,掷骰子,走掷到的点数j,如果当前位置i+j>n;就重掷骰子
从i走到j获得的金子数为dp[i]=dp[i]+dp[i+j]/min(6,n-i);
#include<stdio.h>
#include<string>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<math.h>
#include<map>
#define inf 0x3f3f3f3f
const long long mod=10000007;
using namespace std;
int main()
{
int t;
scanf("%d",&t);
int r=0;
while(t--)
{
int n;
scanf("%d",&n);
double dp[102];
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
scanf("%lf",&dp[i]);
}
for(int i=n-1;i>=1;i--)//从后往前
for(int j=1;j<=6;j++)
{
dp[i]+=dp[i+j]/(1.0*min(6,n-i));
}
printf("Case %d: %.7lf\n",++r,dp[1]);
}
}