标签:
题意:有一个迷宫是1×n的格子,一个人每到一个格子就能够把这个格子内的金子所有拿走,刚開始站在第1个格子,然后開始掷骰子得到点数x,他就要从当前位置走到加x的位置。假设发现位置是大于n的就又一次掷骰子直到符合,假设他到了第n个格子就能够结束了。
问这个人从迷宫里得到的金子的期望是多少。
题解:能够知道对于每一个位置。下一个位置仅仅能是后6个。所以从这个位置处得到的金子的期望f(i) = (f(i + 1) + f(i + 2) + … + f(i + 6)) / 6。假设这个位置后不足6。f(i) = (f(i + 1) + … + f(n)) / (n - i)。
#include <stdio.h>
#include <math.h>
const int N = 105;
int n, a[N];
double f[N];
int main() {
int t, cas = 1;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
f[n - 1] = a[n - 1];
for (int i = n - 2; i >= 0; i--) {
f[i] = 0;
int cnt = n - i - 1;
if (cnt > 6)
cnt = 6;
for (int j = i + 1; j <= i + cnt; j++)
f[i] += f[j];
f[i] = f[i] / cnt + a[i];
}
printf("Case %d: %.10lf\n", cas++, f[0]);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/bhlsheji/p/5364965.html