【luogu4450】收集邮票 [期望dp]

luogu4450 收集邮票

有n种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n。但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱。
现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。

==期望dp是真的神

做过SPOJ1026FACDICE 就可以知道 若费用为1时,即求期望买多少次能买到每一种邮票

\(f_i\)表示已经收集了\(i\)张 还期望买多少次才收集齐 \(f[i]=\frac in*f[i]+\frac{n-i}nf[i+1]+1=f[i+1]+\frac n{n-i}\)

同理我们可以想到 设\(g[i]\)表示已经收集了\(i\)张 还期望花费多少钱次才能收集齐

\(\begin{align*}g[i]=\frac in(g[i]+f[i]+1)+\frac{n-i}n(g[i+1]+f[i]+1)=g[i+1]+f[i+1]+\frac{i*f[i]+n}{n-i}\end{align*}\)

int main(){
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif
    rd(n),f[N]=g[n]=0;
    for(int i=n-1;i>=0;--i)
        f[i]=f[i+1]+((double)n/(n-i)),g[i]=g[i+1]+f[i+1]+((double)i*f[i]+n)/(double)(n-i);
    printf("%.2f",g[0]);
    return 0; 
}

你可能感兴趣的:(【luogu4450】收集邮票 [期望dp])