題意:有一個六面體骰子,每投一次就往前走多少格,並可以獲得格子上的金幣,求走到最後可以獲得的金幣數的期望。
思路:當前點的期望P[i] = A[i]+(P[i-1]+P[i-2]+P[i-3]+P[i-4]+P[i-5]+P[i-6])/6,如果不夠六格, 則爲P[i] = A[i]+(P[i-1]+P[i-2]+P[i-3]+…+P[i-n])/n。
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
int T, cas=1;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
double a[110];
for (int i = 0; i < n; i++)
scanf("%lf", &a[i]);
double p[110];
memset(p,0,sizeof(p));
p[n-1] = a[n-1];
for (int i = n-2; i >= 0; i--)
{
p[i] = a[i];
int t = 6;
if (n-i-1<6)
t = n-i-1;
for (int j = 1; j <= t; j++)
{
p[i] += 1.0*p[i+j]/t;
}
}
printf("Case %d: %f\n", cas++, p[0]);
}
return 0;
}