有 n 个格子,每个格子有一个值,你没走到一个格子就获得这个格子的值,你现在在第 1 个格子,求你到达第 n 个格子的期望获得的值

这个题只能反着求,不能顺序,假设我们有案例  4   1 2 3 4

那么 4 的期望应该是前三个期望/3+第四个值,但是,走到前三个点的的概率相同吗?

显然,从1走到1的概率是1,走到2的概率是1/3,走到3的概率是1/3+1/3*1/2,所以不能顺序直接累加求期望。

那么我们考虑反着求,对于每个点,他等概率走到他后面的六个点,那么以这个点作为起点走到点n的期望就等于他后面六个点作为起点走到n的期望/6+这个点的值。

#include <bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
const ll mod = 1e9 + 7;
int a[1005];
double ans[1005];
int main()
{
	int T, ca = 1;
	sc("%d", &T);
	while (T--)
	{
		memset(ans, 0, sizeof(ans));
		int n;
		sc("%d", &n);
		for (int i = 1; i <= n; i++)
			sc("%d", &a[i]);
		for (int i = n; i >= 1; i--)
		{
			int cnt = min(n - i, 6);
			for (int j = i + 1; j <= i + cnt; j++)
			{
				ans[i] += ans[j];
			}
			if (cnt)
				ans[i] = ans[i] / cnt + a[i];
			else
				ans[i] = a[i];
		}
		for (int i = 1; i <= n; i++)
			printf("%.2lf  ", ans[i]);
	}
}