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}
nn−i
下一次买不到,但下两次买到不同球星的概率是
i
n
×
n
−
i
n
\frac{i}{n} \times \frac{n-i}{n}
ni×nn−i
…
下 k k k 次买到不同球星的概率是 ( i n ) k − 1 × n − i n (\frac{i}{n})^{k-1} \times \frac{n-i}{n} (ni)k−1×nn−i
假设第
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×nn−i+2×ni×nn−i+3×(ni)2×nn−i+...+k×(ni)k−1×nn−i
则有
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×nn−i+2×(ni)2×nn−i+3×(ni)3×nn−i+...+k×(ni)k×nn−i
\text{}
\text{}
好像有点丑
令
H
=
i
n
H=\frac{i}{n}
H=ni,那么
n
−
i
n
=
1
−
H
\frac{n-i}{n}=1-H
nn−i=1−H
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×(1−H)+2×H×(1−H)+......+k×Hk−1×(1−H)
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×(1−H)+2×H2×(1−H)+......+k×Hk×(1−H)
错位相减
(
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)
(1−H)E≈1−H+H×(1−H)+H2×(1−H)+......+Hk×(1−H)−k×Hk×(1−H)
E
≈
1
+
H
+
H
2
+
H
3
+
.
.
.
.
.
+
H
k
−
1
E\approx 1+H+H^2+H^3+.....+H^{k-1}
E≈1+H+H2+H3+.....+Hk−1
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}
E≈1+ni+(ni)2+...+(ni)k−1
\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×(1−H)、(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+nn−ini−(ni)k=n−in−i+ni×n=n−in
所以我们得出
f
[
i
+
1
]
=
f
[
i
]
+
n
n
−
i
f[i+1]=f[i]+\frac{n}{n-i}
f[i+1]=f[i]+n−in
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]+n−0n+n−1n+n−2n+....+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[k−1]+1)×nn−(k−1)
前者表示抽中相同的了,后者表示抽中不同的了
但是
k
n
+
n
−
(
k
−
1
)
n
≠
1
\frac{k}{n}+\frac{n-(k-1)}{n}≠1
nk+nn−(k−1)=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)×nk−1+(f[k−1]+1)×nn−(k−1)
移项得:
(
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}
(1−nk−1)f[k]=nk−1+(nn−(k−1))f[k−1]+nn−(k−1)
( 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−(k−1))f[k]=(nn−(k−1))f[k−1]+1
f
[
k
]
=
f
[
k
−
1
]
+
n
n
−
(
k
−
1
)
f[k]=f[k-1] + \frac{n}{n-(k-1)}
f[k]=f[k−1]+n−(k−1)n
f
[
k
+
1
]
=
f
[
k
]
+
n
n
−
k
f[k+1]=f[k]+\frac{n}{n-k}
f[k+1]=f[k]+n−kn同方案一
后记
两个
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;
}