概率和期望 简单了解

概率

基本事件定义:指试验中可能出现的一个结果

  1. 必然事件
    定义:在此次试验中,必然发生的事件,即其\(P\)值为\(100\%\)
  2. 不可能事件
    定义:在此次试验中,不可能发生的事件,其\(P\)值为\(0\)
  3. 随机事件
    定义:在此次试验中,可能发生也可能不发生的事件,其\(0 \leqslant P \leqslant 1\)(当\(P=1\)时是必然事件,当\(P=0\)时是不可能事件)

概率定义:指一个随机事件发生的概率,通常用\(P(A)\)表示\(A\)事件发生的概率

其他事件定义(指几个互相有关联的事件)

  1. 等可能事件:在一次试验中,它由\(n\)个基本事件组成,且每个基本事件发生的概率都是相等的,那么我们称这\(n\)个事件为等可能事件
  2. 互斥事件:在一次试验中,由两个随机事件\(A,B\),若\(A\)发生,则\(B\)不可能发生,若\(B\)发生,则\(A\)不可能发生,我们称它们为互斥事件(即\(P(A \cap B)= \empty\),表示\(A,B\)不可能同时发生,\(\empty\)表示空集的意思)
  3. 对立(互补)事件:在一次试验中,若在\(A,B\)事件中,\(A和B\)必然有一个且只有一个发生,那么我们称它们为对立(互补)事件(即\(P(A \cup B)=S\),且\(P(A \cap B)=\empty\),表示\(A,B\)中任意发生一个的事件存在与这个试验的所有集合里面,但\(A,B\)不能同时发生)
    注意互斥事件与对立事件的区别
  4. 和事件:\((A \cup B)\)称为\(A,B\)的和事件,表示\(A,B\)中任意发生一个的概率,有\(P(A \cup B)=P(A)+P(B)-P(A \cap B)\)
  5. 积事件:\((A \cap B)\)称为\(A,B\)的积事件,表示\(A,B\)同时发生的概率,如果\(A,B\)互不干扰,有\(P(A \cap B)=P(A)*P(B)\)

概率的性质

  1. 非负性:即\(0 \leqslant P(A) \leqslant 1\)
  2. 如果\(A,B\)互为对立事件,则\(P(A)+P(B)=1\)
  3. 一个重要的知识点伯努利大数定理(待补)

期望

定义:是试验中每次可能结果的概率乘以其结果的总和

计算:我们设\(A_1,A_2...A_n\)表示\(n\)种事件出现的概率,\(P_1,P_2...P_n\)表示这\(n\)种事件的值,则对于事件\(X\)的期望值\(E(X)=\sum_{i=1}^{n}A_iP_i\)

概率与期望应用

Codeforces Round #730 (Div. 2)——C. Need for Pink Slips(题目

题目大意:有三个数\(c,m,p\),抽中他们的概率分别为\(P_c,P_m,P_p\),抽到\(p\)游戏结束,抽到\(c或m\),将其概率减\(v(不足则减本身)\),然后平均分配到其他两个数上(若概率为\(0\)则不分,放到另一个身上),问游戏轮数的数学期望

分析:暴力\(dfs\)模拟即可,注意\(double\)精度判断问题

代码实现:

#include<bits/stdc++.h>
using namespace std;
int t;
double c,m,p,v,mans;
void dfs(double c,double m,double p,double v,double s,int j)
{
//	printf("%.6lf %.6lf %.6lf %.6lf %.6lf\n",c,m,p,v,s);
//	printf("dfs : %.6lf %.6lf\n",p*s*1.000000,s);
	mans+=p*s*1.000000*j;
	double g;
	if (c-0>=0.0000001)
	{
		if (c>=v) g=v;
		else g=c;
		c-=g;
		if (m-0>=0.0000001) m+=g/2;
		else p+=g/2;
		if (p-0>=0.0000001) p+=g/2;
		else m+=g/2;
		dfs(c,m,p,v,s*(c+g),j+1);
		c+=g;
		if (m-g/2==0) p-=g/2; else m-=g/2;
		if (p-g/2==0) m-=g/2; else p-=g/2; 
	}
	if (m-0>=0.0000001)
	{
		if (m>=v) g=v;
		else g=m;
		m-=g;
		if (c-0>=0.0000001) c+=g/2;
		else p+=g/2;
		if (p-0>=0.0000001) p+=g/2;
		else c+=g/2;
		dfs(c,m,p,v,s*(m+g),j+1);
		if (c-g/2==0) p-=g/2; else c-=g/2;
		if (p-g/2==0) c-=g/2; else p-=g/2; 
	}
}
int main()
{
	cin >> t;
	while (t--)
	{
		mans=0;
		cin >> c >> m >> p >> v;
		dfs(c,m,p,v,1,1);
		printf("%.6lf\n",mans);
	}
}
posted @ 2021-10-17 10:31  WBWYX  阅读(546)  评论(0)    收藏  举报