概率期望学习笔记

概率和期望

  • 古典概型:
    • 试验只有有限个基本结果
    • 试验的每个结果出现的可能性是相同的

概率的二项式分布

P(X=k)=CnkPk(1p)nk

期望的可加性

  • 用期望的可加性计算时,注意:不考虑所有其他无关变量(不论是否有影响),只考虑当前变量!

E(x+y)=E(x)+E(y)

  • 期望的套路题

  • 随机游走模型

  • 期望+动态规划

  • 例:随机生成一个 1~n 的排列,求逆序对个数的期望

期望的线性性

P(a1>a2)+P(a2>a3)+.....+...=

n(n1)4

策略:

  • 转化成正常的题意(古典概型)
  • 算贡献,算贡献,算贡献!(线性性)

practice:

P1297[国家集训队]单选错位

  • 线性性

ans=min(ai,ai+1)aiai+1

累加即可

CF1096F

  • 线性性

逆序对分为四种:

  • 给定的数之间的逆序对。

  • 不确定的数之间的逆序对。

  • 给定的数在不确定的数左边的逆序对。

  • 给定的数在不确定的数右边的逆序对。

分类讨论即可

P3802

  • 显然在第七次就触发的概率为7!a1/Na2/(N1)a3/(N2)...a7/(N6)

CF280C

  • ans=i=1n1depi

AGC049A

  • fi为有多少点能到达i,则本题与上题类似,

ans=i=1n1fi

P5589

  • 答案显然是

i=1n1fi

本题n的范围是109,所以显然不能枚举,但我们可以枚举删除的数,显然此时这个数只需枚举至n即可,再开一个map辅助记录就能做到O(n)的复杂度。

P2221

大佬的题解

  • 几何分布

抛硬币,p 的概率正面,一直抛直到得到正面停止。问期望次数?

P(x=k)=(1p)k1p

  • 几何分布期望满足一个方程式,(我也不知道这叫啥名字,不过)这其实是“期望步数”这个平均概念的经验性应用。

F=1+p0+(1p)F

F=1p

P4316

  • 1

CF24D

P3232

  • 转化为求每条边的期望经过步数

CF802L

  • 先推柿子,再将它转化为一次函数,再进行递推

fu=auffa+bu,再代入。解出

kx=1degxysonxky

bx=ysonx(by+disx,y)+disfax,xdegxysonxky

本题其实还可以利用期望的线性性,设 fuu走到父亲的期望,再进行递推即可,方程为:

fu=wu+vsonu(wv+fv)

多次查询?

多组查询树上两点之间游走的期望和。

gu为父亲到达u的期望步数,则两点间期望为一段f的和加g的和

gu=gfa+ffafu

P6835

  • 与上题类似

fi=1+ijfi+si1sj1+1di

code

期望和dp

CF518D

  • ft,it秒后有i个人走上电梯的期望,转移方程为:

ft,i=ft1,i1p+(1p)ft1,i

但需要注意,若上一秒有n个人,则:

ft,i=ft1,i1p+ft1,i

若有0

ft,i=(1p)ft1,i

特判即可

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int f=1,w=0;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')    f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		w=(w<<1)+(w<<3)+(c^48);
		c=getchar();
	}
	return f*w;
}
int n,t;
double p;
double f[2010][2010];
int main(){
	n=read();cin>>p;
	t=read();
	f[0][0]=1.0;
	for(int i=1;i<=t;i++){
		for(int j=0;j<=n;j++){
			if(j==0)	f[i][j]=(1-p)*f[i-1][j];
			else if(j==n){
				f[i][j]=f[i-1][j-1]*p+f[i-1][j];
			}else{
				f[i][j]=f[i-1][j-1]*p+(1-p)*f[i-1][j];
			}
		}
	}
	double ans=0;
	for(int i=0;i<=n;i++){
		ans+=f[t][i]*i;
	}
	printf("%.7f",ans);
	return 0;
}

P1850

  • 设计状态:用fi,j,k来表示,i表示时间段,j表示已经用了j次机会,k表示换与不换

可得状态转移方程:

fi,j,0=min(fi1,j,0+dis1,fi1,j,1+ki1×dis2+(1ki1)×dis3)

P1365

  • 显然这道题无法dp,我们可以考虑期望的线性性。

  • 如果无问号:

(X,L)表示,得分为X,当前combo长度为L

如果接上了 E(X1)=E(X+2L+1)

如果没接上 E(X1)=E(X)

如果有问号

E(X1)=E(X)+E(L)+12

E(L1)=E(L)+12

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
inline int read(){
	int f=1,w=0;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')    f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		w=(w<<1)+(w<<3)+(c^48);
		c=getchar();
	}
	return f*w;
}
int n;
char s[N];
double f[N];
double len;
int main(){
	n=read();
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	for(int i=1;i<=n;i++){
		if(s[i]=='o'){
			f[i]=f[i-1]+2*len+1;
			len++;
		}else if(s[i]=='x'){
			f[i]=f[i-1];
			len=0;
		}else if(s[i]=='?'){
			f[i]=f[i-1]+len+0.5;
			len=(len+1)/2;
		}
	}
	printf("%.4f",f[n]);
	return 0;
}

p4550

  • 与上题类似

P2473

  • fi,S=1nx=0n1max((fi+1,S)+ax)×[pxS]+fi+1,S)

倒叙转移即可。

本文作者:xxx2022

本文链接:https://www.cnblogs.com/xxx2022/p/17686112.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   OIer_xxx2022  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起