__gcd
2020-01-31 14:41:21
Update:2020.2.1 发出题解的第二天
初学期望DP,有问题请指出
众所周知,期望DP的定义状态一般都为已经……还需要……的期望
由于本题需要求的就是
自己得到所有种类的邮票需要花费的钱数目的期望。
那么我们就可以定义一个
这个应该不需要我讲吧qwq
首先吧这个写在前面
期望公式:
发现
买到之前买到过的邮票种类,此时
买到之前没有买到过的,此时
注:以上的
根据公式,我们就可以得到关于
化简之后得到状态转移方程:
得到
买到之前买到过的邮票种类:此时
买到之前没有买到过的,此时
然后我们又轻松地得到了关于
请自行化简
既然我们有了转移方程,那就开写呗
num[n] = 0; ans[n] = 0;
for(int i = n - 1; i >= 0; i--)
{
double p1 = frac(i, n), p2 = frac(n - i, n);
num[i] = (p2 * num[i + 1] + 1) / (1 - p1);
ans[i] = (ans[i + 1] * p2 + num[i] * p1 + num[i + 1] * p2 + 1) / (1 - p1);
}
cout << fixed << setprecision(2) << ans[0];
注:以上的
以上就是中心代码
但是这篇题解并没有完,题解中的几个细节还没有完善别急着抄代码啊
A:在天数的过程中,
A:正序循环也是可以的,只需要将状态“已经……还需要……的期望”改成“……需要……的期望”即可,大家不妨去推导试试。
end.