期望的定义
什么是期望?根据数学课本上的定义,期望值=sum(概率*(数值+变化))
我们用符号来表示期望,
期望的线性可加性
期望的线性可加性主要是把问题拆分为子问题:
在通常情况下,两个随机变量的期望值不等于这两个随机变量的期望值的积, 也就是
当时,它们的协方差为0,协方差用符号表示,协方差的公式为:
其中是方差的意思。
我们也可以通过期望求方差,公式为:
反过来也可以通过方差求出期望的平方:
对于一个常数 来说,常数的期望就是自身:,对于一个随机数来说,它的期望值
求解
其中全概率公式为:表示为B的概率是A的概率下B的概率下的总和,其中A的概率又从A1,A2,……到An,那么B的概率就是A1下B的概率加上A2下B的概率,直到An下B的概率的总和。
状态表示
例题
sovel:
状态表示
我们根据题目来设状态表示:
f[i]表示买了i张能买到不同卡片种类数的期望值。
我们再来设f[i+1],即买i+1张卡片可以买到的不同卡片种类数的期望值。
我们看f[i+1]是否可以由f[i]推过来。
f[i]就是已经买了i个产品当中包含的卡片种类,那还剩多少个卡片种类呢,是不是k-f[i] ×,为什么×,因为是求期望,×就是求还剩多少个卡片的种类的期望。 对于每一种卡片买到都需要的概率,一共有种,全都×,就是一个全概率公式。
转移方程
那我们的转移方程就可以写为:
初始化
只买到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;
}
例题2
状态表示
我们还是根据题目来设状态表示,题目要求我们买完k种需要买多少种卡片,
那我们就设 f[i]表示买了i个种类的卡片买了多少张卡片。
我们再来设f[i+1],看怎么由f[i]推过来。
假设现在我们买了一张卡片,那么我们是有的概率买到一个新的卡片种类的,那我们买一张卡片一定可以买到新种类卡片的概率就是;
关键在于怎么求。
我们买了i种卡片,一共有k种,那就还剩k-1种卡片,那么还剩的能买到的卡片种类的概率就是
转一下公式,就是求出,
code