1426: 收集邮票

1426: 收集邮票

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 334  Solved: 269
[Submit][Status][Discuss]

Description

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

Input

一行,一个数字N N<=10000

Output

要付出多少钱. 保留二位小数

Sample Input

3

Sample Output

21.25

HINT

Source

用f[i]表示已经拥有了i张邮票,则期望还需要购买的邮票数
则f[n]=0
f[i]=f[i]*(i/n)+f[i+1]*((n-i)/n)+1
整理得f[i]=f[i+1]+n/(n-i);
设g[i]为还需要的钱
g[i]=((n-i)/n)*(g[i+1]+f[i+1])+(i/n)*(g[i]+f[i])+1
因为可以视为这张票是1元买的,而后面的每张票都贵了1元
所以要加上f[i+1]或f[i]
然后化简得g[i]=g[i+1]+f[i+1]+i/(n-i)*f[i]+(n/(n-i))

                                  摘自hzwer

#include<cstdio>
using namespace std;
typedef double real;
#define af ((real)n/(real)(n-i))
const int N=1e5+5;
real f[N],g[N];
int main(){
    int n;scanf("%d",&n);
    f[n]=g[n]=0.0;
    for(int i=n-1;~i;i--) f[i]=f[i+1]+af;
    for(int i=n-1;~i;i--) g[i]=g[i+1]+f[i+1]+f[i]*i/(n-i)+af;
    printf("%.2lf",g[0]);
    return 0;
}
时间: 2024-12-28 20:26:48

1426: 收集邮票的相关文章

bzoj 1426:收集邮票 求平方的期望

显然如果收集了k天,ans=k*(k+1)/2=(k^2+k)/2.那么现在要求的就是这个东西的期望. 设f[i]表示已有i张邮票,收集到n张的期望次数,g[i]表示已有i张邮票,收集到n张的次数的平方的期望. 显然i这个点有 $\frac{i}{n}$ 的概率走自环,有 $\frac{n-i}{n}$ 的概率走到i+1这个点. SO $$f[i]=(\frac{i}{n})\times(f[i]+1)+(\frac{n-i}{n})\times(f[i+1]+1)$$ 以前一直不懂平方的期望是

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> #inclu

【BZOJ】1426: 收集邮票 期望DP

[题意]有n种不同的邮票,第i次可以花i元等概率购买到一种邮票,求集齐n种邮票的期望代价.n<=10^4. [算法]期望DP [题解]首先设g[i]表示已拥有i张邮票集齐的期望购买次数,根据全期望公式,可以依赖于买到已集和未集邮票的情况: $$g[i]=\frac{i}{n}*g[i]+\frac{n-i}{n}*g[i+1]+1$$ 当然最后记得+1,然后移项解方程. 设f[i]表示已拥有i张邮票及其的期望代价,会发现因为是倒推,所以代价的问题变得很麻烦. 我们将代价倒置,假设购买k次,那么第

bzoj 1426: 收集邮票【期望dp】

我太菜了,看的hzwer的blog才懂 大概是设f[i]表示已经拥有了i张邮票后期望还要买的邮票数,这个转移比较简单是f[i]=f[i](i/n)+f[i+1]((n-i)/n)+1 然后设g[i]为还需要的钱,可以把转移看做每张票都比前面的贵1元,就是g[i]=((n-i)/n)(g[i+1]+f[i+1])+(i/n)(g[i]+f[i])+1 #include<iostream> #include<cstdio> using namespace std; const int

BZOJ1426: 收集邮票

1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 258  Solved: 206[Submit][Status][Discuss] Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类

【BZOJ-1426】收集邮票 概率与期望DP

1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 261  Solved: 209[Submit][Status][Discuss] Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类

【BZOJ1426】收集邮票 期望

[BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望. Input 一行,一个数字N N<=10000 Output 要付出多少钱. 保留二位小数 Sample Input 3 Sample O

【bzoj1426】收集邮票

题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱. 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望. 输入 一行,一个数字N N<=10000 输出 要付出多少钱. 保留二位小数 样例输入 3 样例输出 21.25 题解 期望dp. 要注意这种题一个数组不能搞定,需要添加辅助数组来完

洛谷 P4538 收集邮票

题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱.现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望. 输入输出格式 输入格式: 一行,一个数字NN<=10000 输出格式: 要付出多少钱.保留二位小数 输入输出样例 输入样例#1: 3 输出样例#1: 21.25 /* QWQWQ手机丢