【Luogu1291】百事世界杯之旅(动态规划,数学期望)

题面

洛谷

题解

设\(f[i]\)表示已经集齐了\(i\)个名字的期望

现在有两种方法:

先说我自己的:

\[f[i]=f[i-1]+1+(1-p)(1*p^1+2*p^2+....)
\]

其中\(p=\frac{i-1}{n}\)

为什么,很简单

首先要多收集一个,期望\(+1\)是显然的

但是还可能一直买到了已经有的名字中的一个

有\(p\)的概率多买一个

\(p^2\)的概率多买两个

这样无穷的算下去

然后对于后面那个式子

做两次错位相减(其实就是一个无穷级数)

推出

\[f[i]=f[i-1]+1+\frac{i-1}{n-(i-1)}
\]

然后递推就行了

第二种方法:

\(fdf\)的方法(感觉这种方法也很强呀)

设\(f[i]\)表示已经收集了\(i\)个

收集到\(n\)个需要的期望

\[f[i]=\frac{i}{n}(f[i]+1)+\frac{n-i}{n}(f[i+1]+1)
\]

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

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

初值:\(f[n]=0\)

倒着算即可

贴上我自己的代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. #include<set>
  8. #include<map>
  9. #include<vector>
  10. #include<queue>
  11. using namespace std;
  12. #define ll long long
  13. #define RG register
  14. inline int read()
  15. {
  16. RG int x=0,t=1;RG char ch=getchar();
  17. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  18. if(ch=='-')t=-1,ch=getchar();
  19. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  20. return x*t;
  21. }
  22. int n;
  23. int ws(ll x)
  24. {
  25. int ret=0;
  26. while(x)++ret,x/=10;
  27. return ret;
  28. }
  29. struct Num
  30. {
  31. ll a,b;
  32. void easy()
  33. {
  34. ll d=__gcd(a,b);
  35. a/=d;b/=d;
  36. }
  37. void output()
  38. {
  39. easy();
  40. if(b==1){printf("%lld\n",a);return;}
  41. ll k=a/b;a-=k*b;
  42. int blk=ws(k),ss=max(ws(a),ws(b));
  43. for(int i=1;i<=blk;++i)putchar(' ');
  44. printf("%lld\n",a);
  45. printf("%lld",k);
  46. for(int i=1;i<=ss;++i)putchar('-');putchar('\n');
  47. for(int i=1;i<=blk;++i)putchar(' ');
  48. printf("%lld\n",b);
  49. }
  50. }f[50];
  51. Num operator+(Num a,Num b)
  52. {
  53. ll d=a.b/__gcd(a.b,b.b)*b.b;
  54. return (Num){a.a*(d/a.b)+b.a*(d/b.b),d};
  55. }
  56. Num operator*(Num a,Num b)
  57. {
  58. Num c=(Num){a.a*b.a,a.b*b.b};
  59. c.easy();
  60. return c;
  61. }
  62. int main()
  63. {
  64. n=read();
  65. f[0]=(Num){0,1};
  66. for(int i=1;i<=n;++i)
  67. {
  68. f[i]=f[i-1]+(Num){1,1};
  69. f[i]=f[i]+(Num){i-1,n-i+1};
  70. }
  71. f[n].output();
  72. return 0;
  73. }

【Luogu1291】百事世界杯之旅(动态规划,数学期望)的更多相关文章

  1. 洛谷P1291 [SHOI2002]百事世界杯之旅 [数学期望]

    题目传送门 百事世界杯之旅 题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听, ...

  2. [Luogu1291][SHOI2002]百事世界杯之旅

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

  3. COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)

    COGS 1224. [SHOI2002]百事世界杯之旅 ★   输入文件:pepsi.in   输出文件:pepsi.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] ...

  4. P1291 [SHOI2002]百事世界杯之旅(概率)

    P1291 [SHOI2002]百事世界杯之旅 设$f(n,k)$表示共n个名字,剩下k个名字未收集到,还需购买饮料的平均次数 则有: $f(n,k)=\frac{n-k}{n}*f(n,k) + \ ...

  5. P1291 [SHOI2002]百事世界杯之旅

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

  6. 洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告

    P1291 [SHOI2002]百事世界杯之旅 题目描述 "--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽 ...

  7. luogu P1291 [SHOI2002]百事世界杯之旅

    题目链接 luogu P1291 [SHOI2002]百事世界杯之旅 题解 设\(f[k]\)表示还有\(k\)个球员没有收集到的概率 再买一瓶,买到的概率是\(k/n\),买不到的概率是\((n-k ...

  8. [SHOI2002]百事世界杯之旅

    题目:"--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯. ...

  9. 「SHOI2002」「LuoguP1291」百事世界杯之旅(UVA10288 Coupons)(期望,输出

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

随机推荐

  1. .vue文件在webstorm中es6语法报错解决方法

    1 语法支持es6设置 Preferences > Languages & Frameworks > JavaScript 把 Javascript Language versio ...

  2. 响应式框架Bootstrap

    概念:Bootstrap将会根据你的屏幕的大小来调整HTML元素的大小 -- 强调 响应式设计的概念. 通过响应式设计,你无需再为你的网站设计一个手机版的.它在任何尺寸的屏幕上看起来都会不错. Boo ...

  3. 搭建简易的c语言与python语言CGI和Apache服务器的开发环境

    搭建简易的c语言CGI和Apache服务器的开发环境 http://www.cnblogs.com/tt-0411/archive/2011/11/21/2257203.html python配置ap ...

  4. Linux 自定义命令

    在某个用户的家目录下 的 .bashrc 文件,写入如下内容: # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . ...

  5. ansible实践2-拷贝文件或目录

      ansible testhost -m copy -a "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mo ...

  6. 【收藏】8段JQuery处理表单的代码片段,很实用

    1 只接受数字输入 $("#uAge").keydown(function(event) { // 允许退格和删除键 if ( event.keyCode == 46 || eve ...

  7. hdu4148 Length of S(n)

    Length of S(n) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  8. appium+Python 启动app(一)

    当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...

  9. C语言队列(数组内核)

    #include <stdio.h>#include <stdbool.h>#include <stdlib.h>struct Queue{ int *pBase; ...

  10. HDU - 2160 递推

    思路:dp(i)表示第i天的猪的数量,g(i)表示第i天新出生的猪的数量,d(i) = d(i-1) * 2 - g(i-2), g(i) = d(i-1) AC代码 #include <cst ...