隐藏页面特效

【专题】概率期望

1|0前言


期望的计算公式:

E(X)=ii×P(x=i)

感性理解:对于一个事件X,可能有各种情况,其中某情况的贡献是i,实际上的情况是x,事件发展成该情况的概率是P(x=i)

例子:有一堆盲盒,随便抽一个打开,得到奖励的期望是E(X),一个盲盒里装的奖励值是i,抽到这个盲盒的概率是P(x=i)

又或者,在这堆盲盒中,不止一个盲盒的奖励值是i,而在所有奖励值不同的盲盒中,最终抽到的奖励值x,而抽到的恰好就是奖励值为i的盲盒的概率即为P(x=i)

期望的线性性:

E(X+Y)=E(X)+E(Y),E(kX)=kE(X)

2|0例题


2|1Game on Tree


CF280C Game on Tree

题目描述

给定一棵有根树,结点编号从 1n。根结点为 1 号结点。

对于每一次操作,等概率的选择一个尚未被删去的结点并将它及其子树全部删去。当所有结点被删除之后,游戏结束;也就是说,删除 1 号结点后游戏即结束。

要求求出删除所有结点的期望操作次数。

解:

每个节点的贡献均为1

E(X)=upu

一个节点能产生贡献当且仅当其祖先均未在它之前删除,则pu=1depu+1(此处令dep1=0,若dep1=1则不需+1


xelsp友情赞助。

2|2百事世界杯之旅


[SHOI2002]百事世界杯之旅

题目描述

假设有 n 个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

解:

f(i)表示现在收集了i个球星名字的情况下,还需要购买饮料的期望次数。

f(i)=1+inf(i)+ninf(i+1)

显然f(n)=0,于是倒推出f(0)就得到答案了。

然后进行一个自己推自己,就得到了:

f(i)=f(i+1)+nin

这题的输出格式有点谔谔

点击查看代码
#include <bits/stdc++.h> using namespace std; #define int long long int get(int x){ int ret = 0; while(x){ ret++; x /= 10; } return ret; } int gcd(int x, int y){ if(!x) return y; return gcd(y%x, x); } // f(x) = f(x+1)(n-x)/n + f(x)x/n + 1 signed main(){ int n; scanf("%lld", &n); int ans1 = 0, ans2 = 1; for(int i = 0; i < n; i++){ ans1 = ans2*n+ans1*(n-i); ans2 *= n-i; int qwq = gcd(ans1, ans2); ans1 /= qwq, ans2 /= qwq; } if(ans1 % ans2 == 0){ printf("%lld\n", ans1/ans2); return 0; } int ans3 = ans1/ans2; ans1 = ans1%ans2; for(int i = 1; i <= get(ans3); i++) putchar(' '); printf("%lld\n", ans1); if(ans3) printf("%lld", ans3); for(int i = 1; i <= get(ans2); i++) putchar('-'); putchar('\n'); for(int i = 1; i <= get(ans3); i++) putchar(' '); printf("%lld\n", ans2); return 0; }

2|3收集邮票


收集邮票

2024.11.14.update:重温本题,结合洛谷其他dalao的题解,采用了更易于理解的说法

题目描述

n种邮票,每次买一张,买到每种邮票的概率是相同的(1n),但是每次购买邮票的费用不同,第k次购买需要支付k元钱。

问收集所有种类的邮票的期望花费。(输出保留二位小数)

解:

如果买了m次邮票,则花费为c=(m+1)m2
根据期望的线性性,E(c)=12[E(m2)+E(m)]

那么这个问题将拆分成两个部分:购买次数的期望,(购买次数)2的期望(而非期望的平方)。

根据上一题的结论,求购买次数的期望可以通过式子f(i)=f(i+1)+nni递推求解,其中f(i)对应已有i种邮票的E(mi)

我们可以认为E(m)的部分已经解决了。

对于E(m2)的部分,将E((m+1)2)拆开得E(m2+2m+1),由期望的线性性:

E((m+1)2)=E(m2)+2E(m)+E(1)

显然其中的E(1)=1

g(i)表示现在收集了i种邮票的E(mi2)

g(i)=inE((mi+1)2)+niiE((mi+1+1)2)g(i)=in(E(mi2)+2E(mi)+1)+nin(E(mi+12)+2E(mi+1)+1)g(i)=in(g(i)+2f(i)+1)+nin(g(i+1)+2f(i+1)+1)

再进行一个自己推自己,简化为:

g(i)=ini(2f(i)+1)+g(i+1)+2f(i+1)+1

ans(i)表示表示现在收集了i种邮票的E(c)

则:

ans(i)=12(g(i)+f(i))

点击查看代码
#include <bits/stdc++.h> using namespace std; const int N = 10005; double f[N], g[N]; int n; int main(){ scanf("%d", &n); f[n] = g[n] = 0; for(int i = n-1; i >= 0; i--){ f[i] = f[i+1]+(double)n/(n-i); g[i] = (double)i/(n-i)*(f[i]*2.0+1.0)+g[i+1]+2.0*f[i+1]+1.0; } printf("%.2f\n", (g[0]+f[0])/2.0); return 0; }

__EOF__

本文作者Meteor2008
本文链接https://www.cnblogs.com/meteor2008/p/18198391.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   _kilo-meteor  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2023-10-23 待办清单[7]
2023-10-23 2023年10月23日模拟赛记录
2023-10-23 数对(pair)
2023-10-23 妹子(girl)
2023-10-23 区间(interval)
点击右上角即可分享
微信分享提示