收集邮票-数学期望

收集邮票

题目描述

n 种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是 n 种邮票中的哪一种是等概率的,概率均为 1/n。但是由于凡凡也很喜欢邮票,所以皮皮购买第 k 次邮票需要支付 k 元钱。

现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。

输入格式

一行,一个数字 NN10000)。

输出格式

输出要付出多少钱,保留二位小数。

样例 #1

样例输入 #1

3

样例输出 #1

21.25

题解

首先明确:设抽k次需要的代价:i=0ki=k2+k2

这启发我们将平方与一次项分开计算,设fi表示已经买到了i种邮票,还要买期望fi次才能买到n种,而gi表示已买i个,还要买的次数平方的期望。

则容易写出状态转移方程:

{fi=infi+ninfi+1gi=in(gi+2fi+1)+nii(gi+1+2fi+1+1)

移项化简可以得到:

{fi=fi+1+nnigi=in(gi+2fi+1)+nii(gi+1+2fi+1+1)

#define N 5005005
double f[N],g[N];
int n;
int main(){
	cin>>n;
	for(int i=n-1;i>=0;--i){
		f[i]=f[i+1]+1.0*n/(n-i);
		g[i]=1.0*n/(n-i)+2.0*i/(n-i)*f[i]+2.0*f[i+1]+g[i+1];
	}
	printf("%.2f\n",(f[0]+g[0])/2.0);
}
posted @   spdarkle  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示