[数学期望] P1291 [SHOI2002]百事世界杯之旅

P1291 [SHOI2002]百事世界杯之旅

简洁题意:

每次从 n n n 种数中选出一个数
求选出 n n n 个不同数的期望次数。
抽中所有数之后不会再抽

题解:这里的公式大部分改自 洛谷ButterflyDew ,只是加入了我自己的理解,省了我很多时间,感谢大佬 [鞠躬]

有两种理解方式:
一、对每一步暴力极限求解。
f [ i ] f[i] f[i] 表示已经买到 i i i 个球星的期望购买次数。
我们由 f [ i ] f[i] f[i] f [ i + 1 ] f[i+1] f[i+1]
下一次买到不同球星的概率是 n − i n \frac{n-i}{n} nni
下一次买不到,但下两次买到不同球星的概率是 i n × n − i n \frac{i}{n} \times \frac{n-i}{n} ni×nni

k k k 次买到不同球星的概率是 ( i n ) k − 1 × n − i n (\frac{i}{n})^{k-1} \times \frac{n-i}{n} (ni)k1×nni

假设第 k k k 次就是正无穷次
则此步的期望即为
E = 1 × n − i n + 2 × i n × n − i n + 3 × ( i n ) 2 × n − i n + . . . + k × ( i n ) k − 1 × n − i n E=1 \times \frac{n-i}{n}+2 \times \frac{i}{n} \times \frac{n-i}{n}+3 \times (\frac{i}{n})^2 \times \frac{n-i}{n}+...+k \times (\frac{i}{n})^{k-1} \times \frac{n-i}{n} E=1×nni+2×ni×nni+3×(ni)2×nni+...+k×(ni)k1×nni
则有
i n × E = 1 × i n × n − i n + 2 × ( i n ) 2 × n − i n + 3 × ( i n ) 3 × n − i n + . . . + k × ( i n ) k × n − i n \frac{i}{n} \times E=1 \times \frac{i}{n} \times \frac{n-i}{n}+2 \times (\frac{i}{n})^2 \times \frac{n-i}{n}+3 \times (\frac{i}{n})^3 \times \frac{n-i}{n}+...+k \times (\frac{i}{n})^k \times \frac{n-i}{n} ni×E=1×ni×nni+2×(ni)2×nni+3×(ni)3×nni+...+k×(ni)k×nni
\text{}
\text{}
好像有点丑
H = i n H=\frac{i}{n} H=ni,那么 n − i n = 1 − H \frac{n-i}{n}=1-H nni=1H

E = 1 × ( 1 − H ) + 2 × H × ( 1 − H ) + . . . . . . + k × H k − 1 × ( 1 − H ) E=1 \times (1-H)+ 2 \times H \times (1-H) +......+k \times H^{k-1} \times (1-H) E=1×(1H)+2×H×(1H)+......+k×Hk1×(1H)

                  H × E = 1 × H × ( 1 − H ) + 2 × H 2 × ( 1 − H ) + . . . . . . + k × H k × ( 1 − H ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ H \times E=1 \times H \times (1-H) + 2 \times H^2 \times (1-H) + ......+k \times H^k \times(1-H)                  H×E=1×H×(1H)+2×H2×(1H)+......+k×Hk×(1H)
错位相减
( 1 − H ) E ≈ 1 − H + H × ( 1 − H ) + H 2 × ( 1 − H ) + . . . . . . + H k × ( 1 − H ) − k × H k × ( 1 − H ) (1-H)E\approx 1-H+H \times (1-H) +H^2 \times (1-H) +...... +H^k \times(1-H) -k \times H^k \times(1-H) (1H)E1H+H×(1H)+H2×(1H)+......+Hk×(1H)k×Hk×(1H)
E ≈ 1 + H + H 2 + H 3 + . . . . . + H k − 1 E\approx 1+H+H^2+H^3+.....+H^{k-1} E1+H+H2+H3+.....+Hk1
E ≈ 1 + i n + ( i n ) 2 + . . . + ( i n ) k − 1 E\approx 1+\frac{i}{n}+(\frac{i}{n})^2+...+(\frac{i}{n})^{k-1} E1+ni+(ni)2+...+(ni)k1
\text{}
\text{}
此步中采用极限的思想丢了一些为0的项,比如说 − k × H k × ( 1 − H ) 、 ( i n ) k 、 ( i n ) k + 1 、 ( i n ) k + 2 -k \times H^k \times(1-H)、(\frac{i}{n})^{k} 、(\frac{i}{n})^{k+1}、(\frac{i}{n})^{k+2} k×Hk×(1H)(ni)k(ni)k+1(ni)k+2
由于 ( i n ) < 1 (\frac{i}{n})<1 (ni)<1 k k k 看作无穷大。我们把它们近似的看作 0 0 0

由等比数列公式:

E = 1 + i n − ( i n ) k n − i n = n − i + i n × n n − i = n n − i E=1+\frac{\frac{i}{n}-(\frac{i}{n})^k}{\frac{n-i}{n}}=\frac{n-i+\frac{i}{n}\times n}{n-i}=\frac{n}{n-i} E=1+nnini(ni)k=nini+ni×n=nin

所以我们得出
f [ i + 1 ] = f [ i ] + n n − i f[i+1]=f[i]+\frac{n}{n-i} f[i+1]=f[i]+nin

f [ n ] = f [ 0 ] + n n − 0 + n n − 1 + n n − 2 + . . . . + n 2 + n 1 f[n]=f[0]+\frac{n}{n-0}+\frac{n}{n-1}+\frac{n}{n-2}+....+\frac{n}{2}+\frac{n}{1} f[n]=f[0]+n0n+n1n+n2n+....+2n+1n

f [ n ] = n × ( 1 1 + 1 2 + . . . + 1 n ) f[n]=n \times (\frac{1}{1}+\frac{1}{2}+...+\frac{1}{n}) f[n]=n×(11+21+...+n1)
\text{}
\text{}
\text{}
二、神奇的自己推自己的方法

同样令 f [ i ] f[i] f[i] 表示已经买到 i i i 个球星的期望购买次数。
显然有:
f [ k ] = ( f [ k ] + 1 ) × k n + ( f [ k − 1 ] + 1 ) × n − ( k − 1 ) n f[k]=(f[k]+1)\times \frac{k}{n} + (f[k-1]+1)\times \frac{n-(k-1)}{n} f[k]=(f[k]+1)×nk+(f[k1]+1)×nn(k1)
前者表示抽中相同的了,后者表示抽中不同的了
但是 k n + n − ( k − 1 ) n ≠ 1 \frac{k}{n}+\frac{n-(k-1)}{n}≠1 nk+nn(k1)=1 而且它无法满足要求:抽中所有名字之后不会再抽

那么将 f [ k ] f[k] f[k] 改为抽中自己有的 且不是 k k k 的期望次数
f [ k ] = ( f [ k ] + 1 ) × k − 1 n + ( f [ k − 1 ] + 1 ) × n − ( k − 1 ) n f[k]=(f[k]+1)\times \frac{k-1}{n} + (f[k-1]+1)\times \frac{n-(k-1)}{n} f[k]=(f[k]+1)×nk1+(f[k1]+1)×nn(k1)
移项得:
( 1 − k − 1 n ) f [ k ] = k − 1 n + ( n − ( k − 1 ) n ) f [ k − 1 ] + n − ( k − 1 ) n (1- \frac{k-1}{n} )f[k]= \frac{k-1}{n} + (\frac{n-(k-1)}{n})f[k-1]+\frac{n-(k-1)}{n} (1nk1)f[k]=nk1+(nn(k1))f[k1]+nn(k1)

( n − ( k − 1 ) n ) f [ k ] = ( n − ( k − 1 ) n ) f [ k − 1 ] + 1 (\frac{n-(k-1)}{n})f[k]= (\frac{n-(k-1)}{n})f[k-1]+1 (nn(k1))f[k]=(nn(k1))f[k1]+1

f [ k ] = f [ k − 1 ] + n n − ( k − 1 ) f[k]=f[k-1] + \frac{n}{n-(k-1)} f[k]=f[k1]+n(k1)n
f [ k + 1 ] = f [ k ] + n n − k f[k+1]=f[k]+\frac{n}{n-k} f[k+1]=f[k]+nkn同方案一

后记

两个 f f f的含义虽然不同,但都能表示抽中 n n n 种后的期望次数
方案一是按照期望的定义理解、方案二的限制是因为它需要通过自己来更新自己

#include<cstdio>
#define LL long long
LL gcd(LL a,LL b){
	if(b==0) return a;
	return gcd(b,a%b);
}
int main()
{
	LL n,a=1,b=1,g;scanf("%lld",&n);
	for(LL i=2;i<=n;i++){
		a=a*i+b;
		b=b*i;
		g=gcd(a,b);
		a/=g;b/=g;
	}a*=n;
	int l=0,L=0;
	LL z=a/b,m=a%b,now=z;
	while(now) now/=10,l++; 
	g=gcd(m,b);
	b/=g;m/=g;
	
	now=b;while(now) now/=10,L++; 
	if(m)
	{
		for(int i=1;i<=l;i++) printf(" ");printf("%lld\n",m);
		
		if(z)printf("%lld",z);
		
		for(int i=1;i<=L;i++) printf("-");printf("\n");
		
		for(int i=1;i<=l;i++) printf(" ");printf("%lld\n",b);
	}
	else printf("%lld\n",z);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值