遇到困难睡大觉ing|

园龄:粉丝:关注:

【做题笔记】收集邮票 做题笔记

P4550 收集邮票

展开目录

Reading

k1 时,可以通过支付 k 元钱获得一张 n 种邮票中的某种邮票。这 n 种邮票等概率出现,求买到全部 n 种邮票的花费期望。

Step 1

kk 元太难搞了,干脆直接全打成 1 元。

设买到 i 张邮票,要买完全部 n 种所需的期望价格为 fi.显然 fn=0.

当买到 i 张邮票时,下次有 in 的概率买到有的,nin 的概率买到没有的。

前者期望为 infi,后者为 ninfi+1.

得到总期望为:

fi=infi+ninfi+1+1

化简可得:

fi=fi+1+nni

Step 2

接下来扩展到 kk 元。

gi 为当前买了 i 张邮票,要买完全部 n 种的期望价格。很显然 gn 也是 0.

于是买到已经有的邮票的期望是 in(gi+fi+1),否则期望为 nin(gi+1+fi+1+1).

所以总期望为:

gi=in(gi+fi+1)+nin(gi+1+fi+1+1)

化简可得:

gi=nnifi+gi+1

Code

因为只需要推两个式子,直接从 n 开始逆推。可以滚动优化。

展开代码
#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
int n;
double f, g;
int main() {
	scanf("%d", &n);
	for(int i = n; i; --i) f += n / (n - i + 1) * 1.0, g += n * f / (n - i + 1) * 1.0;
	printf("%.2lf\n", g);
	return 0;
}

彩蛋

怎么能少了sb错误呢:

image

本文作者:Kiichi

本文链接:https://www.cnblogs.com/Kiichi/p/18425789/4550note

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   _Kiichi  阅读(49)  评论(0编辑  收藏  举报
   
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起