P1291 [SHOI2002] 百事世界杯之旅

题目背景

“……在 2002 年 6 月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更可赴日韩观看世界杯。还不赶快行动!”

题目描述

你关上电视,心想:假设有 nn 个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

输入格式

输入只有一行一个整数,表示不同球星名字的个数 nn。

输出格式

输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为:

 3
5--
 20

第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的位数。分子和分母的首位都与第一个减号对齐。

分数必须是不可约的。

输入输出样例

输入 #1复制

2

输出 #1复制

3

输入 #2复制

17

输出 #2复制

  340463
58------
  720720

说明/提示

数据规模与约定

对于全部的测试点,保证 2 \leq n \leq 332≤n≤33。

我确信洛谷和网上的题解大部分都是错的,少部分是对的的也并没有说清楚。

比如说这个题极限的思想,我没有看到一个提出来的。

首先得明白一点,当已经买到所有的名字以后,是不需要再买的。针对于子问题也这样想。

从两个方面分别具体说说这个题目。

一、对每一步暴力极限求解。

令f[i]f[i]表示已经买到ii个球星的期望购买次数。

我们由f[i]f[i]推f[i+1]f[i+1]

下一次购买可以买到不同球星的概率是\frac{n-i}{n}nn−i​

下两次购买可以买到不同球星的概率是\frac{i}{n} \times \frac{n-i}{n}ni​×nn−i​ 注意到这时第一次买到的情况已经忽略了

...

下kk次购买可以买到不同球星的概率是(\frac{i}{n})^{k-1} \times \frac{n-i}{n}(ni​)k−1×nn−i​

假设第kk次就是正无穷次

则此步的期望即为

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​

则有

\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​

错位相减

E\approx 1+\frac{i}{n}+(\frac{i}{n})^2+...(\frac{i}{n})^{k-1}E≈1+ni​+(ni​)2+...(ni​)k−1

此步中采用极限的思想丢了一些00的项,用“\approx≈”表示采用极限思想,实际上极限是准确值,不需要“\approx≈”,此处只是为了标示,下同。

由等比数列公式

E=1+\frac{\frac{i}{n}-(\frac{i}{n})^k}{\frac{n-i}{n}}E=1+nn−i​ni​−(ni​)k​

\approx \frac{n}{n-i}≈n−in​

所以我们得出

f[i+1]=f[i]+\frac{n}{n-i}f[i+1]=f[i]+n−in​

f[n]=n \times (\frac{1}{1}+\frac{1}{2}+...+\frac{1}{n})f[n]=n×(11​+21​+...+n1​)

二、神奇的自己推自己的方法

同样令f[i]f[i]表示已经买到ii个球星的期望购买次数。

如果从上一个推过来,为

f[i]+=(f[i-1]+1)\times \frac{n-(i-1)}{n}f[i]+=(f[i−1]+1)×nn−(i−1)​

如果从当前推过来,为

f[i]+=(f[i]+1)\times \frac{i}{n}f[i]+=(f[i]+1)×ni​

发现概率之和并不等于1,也就是说,这样写是有问题的。

从上一个推过来肯定没问题,我们考虑从当前推当前的意义。

“买了一个,买的是自己有的的概率”

然而我们考虑最开始说的一句话

“当已经买到所有的名字以后,是不需要再买的。”

也就是说,我们这样写可能把自己买了很多遍,而事实上是并不需要再买的。

于是我们修改一下意义

为“买了一个,买的是自己有的且不是自己的概率”

则推过来就是

f[i]+=(f[i]+1)\times \frac{i-1}{n}f[i]+=(f[i]+1)×ni−1​

那我们这个什么时候买呢?

极限的思想,在最后买时,对期望的影响是微乎其微的

把这两项加起来并化简

就得到了

f[i]=f[i-1]+\frac{n}{n-i+1}f[i]=f[i−1]+n−i+1n​

和上一个方法的结果是一样的

关于合并两个值并不是一样的f[i]f[i],用的也是极限的思想

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值