首页 > 其他 > 详细

[bzoj1426]收集邮票

时间:2019-11-15 21:44:29      阅读:102      评论:0      收藏:0      [点我收藏+]

第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 }
View Code

 

[bzoj1426]收集邮票

原文:https://www.cnblogs.com/PYWBKTDA/p/11869712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!