标签:大于 inline c++ style apc begin namespace std 题解
你有一个 \(n\) 个面的骰子,各面分别有 \(1,2,\cdots,n\) 点;一开始你转动骰子,然后你有两个选择:
你最多可以转动 \(k\) 次骰子,你的得分为让骰子停止后骰子的点数,求分数的期望值.
一开始转动骰子,期望值显然是:\(\displaystyle\frac{1+2+3+\cdots +n}{n}\),记作\(\ E_1\),
我们认为期望一定是最优的策略,所以下一次转动骰子的期望分为两部分:
所以转移就是:\(\ E_i=\left\{\begin{array}{l}\displaystyle\frac{1}{n}\left(\displaystyle\lfloor E_{i-1}\rfloor\cdot E_{i-1}+\sum_{k=\lfloor E_{i-1}\rfloor+1}^{n}k\right)\ ,\ i>1\ ; \\ \displaystyle \frac{1}{n}\sum_{k=1}^{n}k=\frac{n+1}{2}\ ,\ i=1\ . \end{array}\right.\)
#include<bits/stdc++.h>
using namespace std;
int main()
{
double n,ans=0,t=0;
int k;
cin>>n>>k;
while(k--)
{
ans=(ans*t+n*(n+1)/2-t*(t+1)/2)/n;
t=floor(ans);
}
printf("%.9f\n",ans);
return 0;
}
$\text{2020.03.14 Preliminaries for BAPC 2019 }$解题报告
标签:大于 inline c++ style apc begin namespace std 题解
原文地址:https://www.cnblogs.com/DariusOrz/p/12499155.html