题目如下:
思路 or 题解:
期望DP
d
p
[
i
]
+
=
m
a
x
(
d
p
[
i
−
1
]
,
j
∗
1.0
)
/
6.0
dp[i] += max(dp[i - 1], j * 1.0) / 6.0
dp[i]+=max(dp[i−1],j∗1.0)/6.0
i
i
i 是轮数,
j
j
j 是骰子的点数。
注:我们要求得是最大分数的期望, 并不是分数的期望, 所以我们需要取max
AC 代码:
int n;
double dp[100];
void solve()
{
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= 6; j++)
dp[i] += max(dp[i - 1], j * 1.0) / 6.0;
printf("%.10lf\n", dp[n]);
}
int main()
{
buff;
solve();
}