1×N 洞穴,起點 1,終點 N。每回合擲 6 面骰子,前進 X 格(超過 N 重擲),收集該格黃金。到達 N 停止。求期望總黃金。N ≤ 100。
E[i]:從第 i 格開始的期望黃金(含當前格)。
E[N] = gold[N]。
對 i < N:E[i] = gold[i] + (1/k) * Σ_{j=1..k} E[i+j],其中 k = min(6, N-i)(超出 N 的骰面重擲,等價於只考慮有效步數並均分概率)。
#include <bits/stdc++.h>
using namespace std;
double E[105], gold[105];
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("%lf", &gold[i]);
E[N] = gold[N];
for (int i=N-1; i>=1; --i) {
int k = min(6, N-i);
double sum = 0;
for (int j=1; j<=k; ++j) sum += E[i+j];
E[i] = gold[i] + sum / k;
}
printf("Case %d: %.6f\n", cs, E[1]);
}
return 0;
}
%.6f 滿足精度要求。