1 solutions
- 
  21.题目描述 有n种纪念币,每种纪念币被买到的概率为, 特别的,第k次购买花费k元,问期望花费是多少? 2.思路 ①令f[i]表示买了i种纪念币购买的次数 ②令g[i]表示买了i种期望的花费 ③计算得到的g[n]代表买完的花费,即为结果 3.易错点 ①我们可能会重复购买纪念币,不要单单以为买了一种纪念币,下一次就买不到了。 ②第k次购买,k元,是针对每一种邮票,而不是我买了一个新的,还是k+1,买了一个新的,就又重新从1开始。 4.具体分析 显然f[0]=g[0]=0 4.1、 我们要求第i种纪念币的期望购买次数,即我们已经购买了i-1种纪念币,我们有x=的概率买到已经买到的,有y=1-=的概率买到没有的。 我们买第一次,就可以买到下一个纪念币的概率为: 我们买第两次,就可以买到下一个纪念币的概率为: 我们买第三次,就可以买到下一个纪念币的概率为: 我们买第四次,就可以买到下一个纪念币的概率为: 以此内推...... 我们买第k次(假设k为正无穷次),就可以买到下一个纪念币的概率为:(这里代表的是x的k-1次方乘以y,由于Markdown写不出来,就这样写了) 下一步,我们把它累加起来,上图:  于是我们代回原数据: 4.2、 下面给出的递推式:先理性感受一下 下面给出推到过程: 我们已经买了i-1种纪念币,已经买了次 我们再买一次就买到没有买过的纪念币、花费为元,期望花费就是$(x代表的是(i-1)/n,y代表的是(n-i+1)/n别忘了,忘了的可以看看上面的x,y是什么意思)$ 我们再买一次就买到没有买过的纪念币、花费为元,期望花费就是 我们再买一次就买到没有买过的纪念币、花费为元,期望花费就是 再买k次(假设k为正无穷次)花费为:,期望花费就是(这里代表的是x的k-1次方乘以y,由于Markdown写不出来,就这样写了) 下一步,我们把它累加起来,上图:  继续求S1,S2  所以我们得到 因为 所以 讲带入,上图:  所以我们就得到了: 于是这道题就做完了 AC代码: #include<iostream> using namespace std; int n; double f[10005], g[10005]; signed main() { scanf("%d", &n); g[0] = 0; f[0] = 0; for (int i = 1; i <= n; i++) { f[i] = f[i - 1] + (n * 1.0) / (n - i + 1); g[i] = g[i - 1] + f[i] * n * 1.0 / (n - i + 1); } printf("%0.2lf\n", g[n]); return 0; }5.反思总结 ①这道题考察的是数学功底 ②考察细心和耐心 
Information
- ID
- 6610
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- (None)
- # Submissions
- 22
- Accepted
- 6
- Uploaded By
