题意:
共有n个点,每个点有权值, 必定从第一个点出发,到第n个点结束。询问经过历经上权值的期望。 其中每次跳转的步骤在1~6之间
思路:
记录下 dp[i]表示到达第i个点的概率。之后概率乘以权值
#include <cstring>
#include <iostream>
#include <stdio.h>
using namespace std;
int n;
const int maxn=1005;
int a[maxn];
double dp[maxn];
int main()
{
int t;
scanf("%d",&t);
for(int cs=1;cs<=t;cs++)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
dp[1]=1;
printf("Case %d: ",cs);
for(int i=1;i<=n;i++)
{
int len=min(n-i,6);
for(int j=1;j<=len;j++)
dp[i+j]+=dp[i]*(1.0/len);
}
double ans=0;
for(int i=1;i<=n;i++)
ans+=dp[i]*a[i];
printf("%lf\n",ans);
}
}