[bzoj1426]收集邮票
Posted pywbktda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj1426]收集邮票相关的知识,希望对你有一定的参考价值。
第i次购物的花费是i元,那么意味着可以理解为消费要加上次数,因此预处理抽出i张牌后,抽出剩余n-i张牌的期望次数,设g[i]表示这个期望,那么有方程$g[i]=((n-i)*g[i+1]+i*g[i])/n+1$,化简得到$g[i]=g[i+1]+n/(n-i)$
然后即可求出f[i]表示抽出i张牌后还需要的期望价格(假设当前是第一轮),那么同理也可以得到$f[i]=f[i+1]+g[i+1]+i*g[i]/(n-i)+n/(n-i)$,最终f[1]即为答案
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 double g[10005],f[10005]; 5 int main(){ 6 scanf("%d",&n); 7 for(int i=n-1;i>=0;i--)g[i]=g[i+1]+1.0*n/(n-i); 8 for(int i=n-1;i>=0;i--)f[i]=f[i+1]+g[i+1]+i*g[i]/(n-i)+1.0*n/(n-i); 9 printf("%.2f",f[0]); 10 }
以上是关于[bzoj1426]收集邮票的主要内容,如果未能解决你的问题,请参考以下文章