BZOJ 1426 收集邮票 ——概率DP

$f(i)$表示现在有$i$张,买到$n$张的期望

所以$f(i)=f(i+1)+\frac {n}{n-i}$

费用提前计算,每张邮票看做一元,然后使后面每一张加1元

$g(i)$表示当前为$i$张期望到$n$张时花掉的钱。

那么$g(i)=g(i+1)+f(i+1)+\frac{i}{n-i}f(i)+\frac{n}{n-i}$

递推即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
double f[10005],g[10005],nn;int n;
int main()
{
    scanf("%d",&n); nn=n;
    D(i,n-1,0) f[i]=f[i+1]+nn/(nn-i);
    D(i,n-1,0) g[i]=g[i+1]+f[i+1]+i/(nn-i)*f[i]+nn/(nn-i);
    printf("%.2f\n",g[0]);
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6607091.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值