概率期望训练之二

https://www.luogu.org/problem/P4550

这里有个很好的结论

概率正向推,期望反向推

对于这个题而言,是要求期望花费

而这个期望花费又与期望次数有关

所以先算出期望次数,再去推期望花费

f[i]表示购买了i种物品,还要购买物品的期望次数(反向推)

可以得出

再设g[i]表示购买了i种物品,还要购买物品的期望花费(反向推)

可以得出


这里你再来想一想为什么要反向推,因为f[n]=0,g[n]=0,而如果正向推得话f[1]=?又g[1]=?

code:

#include <bits/stdc++.h>
using namespace std;
int n;
double f[10005],g[10005];
int main() {
    scanf("%d",&n);
    for(int i=n-1;~i;--i) {
        f[i]=f[i+1]+(1.0*n)/(1.0*(n-i));
        g[i]=(1.0*i)/(1.0*(n-i))*(f[i]+1)+g[i+1]+f[i+1]+1;
    }
    printf("%.2lf\n",g[0]);
    return 0;
}
posted @ 2019-10-18 16:19  wzx_believer  阅读(103)  评论(0编辑  收藏  举报