期望dp

295 阅读3分钟

期望的定义

什么是期望?根据数学课本上的定义,期望值=sum(概率*(数值+变化))

image.png 我们用E E符号来表示期望,

期望的线性可加性

期望的线性可加性主要是把问题拆分为子问题: image.png

在通常情况下,两个随机变量的期望值不等于这两个随机变量的期望值的积, 也就是E(xy)!=E(x)×E(y)E(xy)!=E(x)×E(y)

E(xy)==E(x)×E(y)E(xy)==E(x)×E(y) 时,它们的协方差为0,协方差用covcov 符号表示,协方差的公式为: E(XY)E(X)E(Y)D(x)×D(y)\frac{ E(XY)-E(X)E(Y) }{\sqrt{D(x)}×\sqrt{D(y)}}

其中DD是方差的意思。

我们也可以通过期望求方差,公式为: D(x)=E(x2)E(x)2D(x)=E(x^2)-E(x)^2

反过来也可以通过方差求出期望的平方: E(x2)=D(x)+E(x)2E(x^2)=D(x)+E(x)^2

对于一个常数CC 来说,常数的期望就是自身:E(C)=CE(C)=C,对于一个随机数来说,它的期望值E(CX)=CE(x)E(CX)=CE(x)

求解

image.png

其中全概率公式为:p(B)=i=1np(Ai)p(BAi) p(B)= \sum_{i=1}^{n} p(Ai) p(B|Ai)表示为B的概率是A的概率下B的概率下的总和,其中A的概率又从A1,A2,……到An,那么B的概率就是A1下B的概率加上A2下B的概率,直到An下B的概率的总和。

状态表示

image.png

例题

image.png

sovel:

状态表示

我们根据题目来设状态表示:

f[i]表示买了i张能买到不同卡片种类数的期望值。

我们再来设f[i+1],即买i+1张卡片可以买到的不同卡片种类数的期望值。

我们看f[i+1]是否可以由f[i]推过来。

f[i]就是已经买了i个产品当中包含的卡片种类,那还剩多少个卡片种类呢,是不是k-f[i] ×1k \frac{1}{k},为什么×1k \frac{1}{k},因为是求期望,×1k \frac{1}{k}就是求还剩多少个卡片的种类的期望。 对于每一种卡片买到都需要1k \frac{1}{k}的概率,一共有kf[i]k-f[i]种,全都×1k \frac{1}{k},就是一个全概率公式

转移方程

那我们的转移方程就可以写为:f[i]+((kf[i])/k)f[i]+((k-f[i])/k)

初始化

只买到1张卡片,只可能买到1个种类:f[1]=1 f[1]=1

code

#include<iostream>
using namespace std;
const int N=1e6+10;
double f[N];   //期望值可能是小数,所以用double
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);
	int n=0,k=0;cin>>n>>k;
	f[1]=1;
	
	for(int i=2;i<=n;i++)
	{
		f[i]=f[i-1]+(k-f[i-1])/k;   //f[1]已经表示了,所以循环从2开始,当i为2时用f[i-1]可以访问到f[1]
	}
	
	printf("%.6lf\n",f[n]);
	return 0;
}

image.png

例题2

image.png

状态表示

我们还是根据题目来设状态表示,题目要求我们买完k种需要买多少种卡片,

那我们就设 f[i]表示买了i个种类的卡片买了多少张卡片。

我们再来设f[i+1],看怎么由f[i]推过来。

假设现在我们买了一张卡片,那么我们是有PP的概率买到一个新的卡片种类的,那我们买一张卡片一定可以买到新种类卡片的概率就是;1P \frac{1}{P}

关键在于PP怎么求。

我们买了i种卡片,一共有k种,那就还剩k-1种卡片,那么还剩的能买到的卡片种类的概率就是

P=kikP= \frac{k-i}{k}

转一下公式,就是求出1P\frac{1}{P} 1P=kki\frac{1}{P}=\frac{k}{k-i}

code

image.png image.png