考え方
残り$n$ターンのときの期待値を$f(n)$とすると,\begin{aligned}
f(1) &= \sum_{i = 1}^{6} i \times \frac{1}{6} \\
f(n) &= \sum_{i = 1}^{6} \max\Bigl(i, f(n - 1) \Bigr) \times \frac{1}{6}
\end{aligned}
f(1) &= \sum_{i = 1}^{6} i \times \frac{1}{6} \\
f(n) &= \sum_{i = 1}^{6} \max\Bigl(i, f(n - 1) \Bigr) \times \frac{1}{6}
\end{aligned}
回答例
再帰関数
N = int(input()) def f(x): if x == 1: return sum(range(1, 7)) / 6 ans = 0 prev = f(x - 1) for i in range(1, 7): ans += i / 6 if prev < i else prev / 6 return ans print(f(N))
DP的
N = int(input()) prev = 0 for _ in range(N): ans = 0 for i in range(1, 7): ans += max(i, prev) ans /= 6 prev = ans print(ans)