noip专题复习之数学(5)——概率与数学期望

1.全概率公式:

将样本分成若干个不相交的部分B1,B2,...,Bn,则PA=PA|B1PB1+PA|B2PB2+...+PA|BnPBn。(PA|B)是指在B事件发生的条件下,事件A发生的概率。

使用全概率公式的关键是“划分样本空间”,只有把所有可能不重不漏地进行分类,并算出每个分类下事件发生的概率,才能得出该事件发生的总概率。

2.数学期望:

简单地说,随机变量X的数学期望EX就是所有可能值按照概率加权的和

比如一个随机变量有1/2的概率为1,1/3的概率为2,1/6的概率为3,则这个随机变量的数学期望为11/2+21/3+3*1/6=5/3.

(1)期望的线性性质:E(X+Y)=EX+EY

(2)全期望公式:E(Y)=E(E(Y|X))

(证明需用到微积分,暂时放一放)

例题1:麻球繁衍

题意:有k只麻球,每只活一天就会死亡,临死之前可能会生出一些新的麻球。具体来说,生i个麻球的概率为Pi。给定m,求m天后所有麻球均死亡的概率。注意:不足m天时就已全部死亡的情况也考虑在内。

分析:由于每只麻球独自存活,只需求出一开始只有1只麻球,m天后全部死亡的概率f(m)即可。由全概率公式有:

f(i)=P0+P1f(i1)+P2f(i1)2+P3f(i1)3+...+Pn1f(i1)n1

其中Pjf(i1)j的含义是这只麻球生了j个后代,他们在i1天后全部死亡的概率。

最终答案应为f(m)k

Code:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath> 
using namespace std;
const int N=1005;
int T,n,k,m;
double p[N],f[N];
inline double fast_pow(double a,int p){
    double ans=1;
    for (;p;p>>=1,a*=a)
      if (p&1)
        ans*=a;
    return ans;
}
int main(){
    scanf("%d",&T);
    for (int t=1;t<=T;++t){
        scanf("%d%d%d",&n,&k,&m);
        for (int i=0;i<n;++i) scanf("%lf",&p[i]);
        memset(f,0,sizeof(f));
        f[0]=0; f[1]=p[0];
        for (int i=2;i<=m;++i)
          for (int j=0;j<n;++j) f[i]+=p[j]*fast_pow(f[i-1],j);
        printf("Case #%d: %0.7lf\n",t,fast_pow(f[m],k));
    }
}

posted on   dolires  阅读(714)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示