P4550 收集邮票

题目描述

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

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

3
输出 #1复制

21.25

这一道题可咋做?

顿时懵了

我们先来想一下这个问题的简化版 由简入繁

假如一共只有1种邮票 (废话啊) 那买到的概率自然是1/1 肯定能够买到

(QAQ不就是1嘛)

假如一共只有2种邮票(事情越来越有意思了)

如果不考虑两种邮票之间的联系 买到第一种邮票的概率是1/2 第二种也是 1/2

1+{1*1/2 + 2*1/4 + 3*(1/2)^3 +...+ k*(1/2)^k}   k是正无穷

化简得1+2=3

期望做法:

定义f[i]为差i种买齐时的期望票数

f[0]=0;//初始定值

ans=f[n]//答案状态

拿n=2来举例

f[1]=1/2*(f[0]+1) + 1/2 *(f[1]+1)

f[1]=2;

f[2]=2/2(f[1]+1)=3

n=3

f[1]=1/3*(f[0]+1) +2/3*(f[1]+1)  =3

f[2]=2/3 * (f[1]+1) +1/3*(f[2]+1) =4.5

f[3]=3/3*(f[2]+1)=5.5

n

f[i]=i/n*(f[i-1]+1) +(n-i)/n*(f[i]-1)

一波移项得

f[i]=f[i-1]+n/i

注:以上蒟蒻的异想天开部分的f全部脑补成g

接下来上我们老师的完整推导过程:

前方高能!

n=2
1+ {1*1/2+2*(1/2)^2+3*(1/2)^3+...(k-1)*(1/2)^(k-1)+k*(1/2)^k}
{}*2={1+2*1/2+3*(1/2)^2+4*(1/2)^3+...k*(1/2)^(k-1)}
{}={}*2-{}
=1+1/2+(1/2)^2+(1/2)^3+...+(1/2)^(k-1)-k*(1/2)^k
=2-(1/2)^(k-1)-k*(1/2)^k
=2

ans=3
定义g[i]为差i种买齐时的期望
g[0]=0
n=2
g[1]=1/2*(g[0]+1)+1/2*(g[1]+1)
g[1]=g[0]+2=2
g[2]=2/2*(g[1]+1)=3

n=3
g[1]=1/3*(g[0]+1)+2/3*(g[1]+1)
g[1]=g[0]+3=3
g[2]=2/3*(g[1]+1)+1/3*(g[2]+1)
3*g[2]=2*g[1]+g[2]+3
g[2]=g[1]+1.5=4.5
g[3]=3/3*(g[2]+1)=5.5

n
g[i]=i/n*(g[i-1]+1)+(n-i)/n*(g[i]+1)
i*g[i]=i*g[i-1]+n
g[i]=g[i-1]+n/i

f[i][j]还差i种,这一次买需要j元,到买齐花费的期望
f[i][j]=i/n*(f[i-1][j+1]+j)+(n-i)/n*(f[i][j+1]+j)

买一张就涨价一元,如果之后还要买g张,那么贡献g*1元
f[i][j+1]=f[i][j]+g[i]

f[i][j]=i/n*(f[i-1][j]+g[i-1]+j)+(n-i)/n*(f[i][j]+g[i]+j)
f[i]=i/n*(f[i-1]+g[i-1]+j)+(n-i)/n*(f[i]+g[i]+j)

f[i][j]=f[i-1][j]+g[i-1]+(n-i)/i*g[i]+n*j/i

ans=f[n][1]
f[i]=f[i-1]+g[i-1]+(n-i)/i*g[i]+n/i

代码可以继续简化一些哦

#include<bits/stdc++.h>
using namespace std;
//const int maxn=10005;
//double g[maxn],f[maxn];
int main()
{
int n;
scanf("%d",&n);
// for(int i=1;i<=n;i++)
// g[i]=g[i-1]+n*1.0/i;
// for(int i=1;i<=n;i++)
// f[i]=f[i-1]+g[i-1]+(n-i)*1.0/i*g[i]+n*1.0/i;
// printf("%.2lf",f[n]);
double g=,f=;
for(int i=;i<=n;i++)
{
f=f+g+n*1.0/i;
g=g+n*1.0/i;
f=f+(n-i)*1.0/i*g;
}
printf("%.2lf",f);
return ;
}

P4550 收集邮票的更多相关文章

  1. P4550 收集邮票-洛谷luogu

    传送门 题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢 ...

  2. bzoj1426 (洛谷P4550) 收集邮票——期望

    题目:https://www.luogu.org/problemnew/show/P4550 推式子……:https://blog.csdn.net/pygbingshen/article/detai ...

  3. 洛谷P4550 收集邮票(概率期望)

    传送门 神仙题啊……这思路到底是怎么来的…… ps:本题是第$k$次买邮票需要$k$元,而不是买的邮票标号为$k$时花费$k$元 我们设$g[i]$表示现在有$i$张,要买到$n$张的期望张数,设$P ...

  4. Luogu P4550 收集邮票

    题目链接:Click here Solution: 本题直接推价格似乎很难,考虑先从购买次数入手 设购买次数\(g(i)\)为当前有\(i\)种不同的邮票,要买到\(n\)种的期望购买次数 可以由期望 ...

  5. P4550 收集邮票 与 灵异的期望

    考前复习一下期望相关知识,这题的期望还是很巧妙的. 设 \(f_{i}\) 表示已经买到了 \(i\) 张不同的邮票的期望步数,\(g_{i}\) 表示表示已经买到了 \(i\) 张不同的邮票的期望花 ...

  6. [洛谷P4550]收集邮票

    题目大意:有$n(n\leqslant10^4)$个物品,第$i$次会从这$n$个物品中随机获得一个,并付出$i$的代价,问获得所有的$n$个物品的代价的期望. 题解:令$f_i$表示现在已经获得了$ ...

  7. [P4550] 收集邮票 - 概率期望,dp

    套路性地倒过来考虑,设\(f[i]\)表示拥有了\(i\)种票子时还需要多少次购买,\(g[i]\)表示还需要多少钱 推\(g[i]\)递推式时注意把代价倒过来(反正总数一定,从顺序第\(1\)张开始 ...

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

    1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 261  Solved: 209[Submit][Status][Discuss] ...

  9. 【BZOJ1426】收集邮票 期望

    [BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的, ...

随机推荐

  1. .map() .filter() .reduce() .includes() .some() .every()的用法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Activiti工作流引擎学习(一)

    1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...

  3. 运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

    运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\vie ...

  4. LightOJ - 1284 Lights inside 3D Grid (概率计算)

    题面: You are given a 3D grid, which has dimensions X, Y and Z. Each of the X x Y x Z cells contains a ...

  5. dotnet 通过 WMI 拿到显卡信息

    本文告诉大家如何通过 WMI 拿到显卡信息 如果使用的是 dotnet core 请先引用 Microsoft.Windows.Compatibility 才可以使用 WMI 代码 通过下面的代码可以 ...

  6. supported platform

    Target name Platform Architecture Endianness Developer(s) Known Issues/Notes adm5120 Infineon/ADMtek ...

  7. nginx负载均衡的几种模式

    nginx 的 upstream目前支持 4 种方式的分配 ).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. ).weight 指定轮询几率,we ...

  8. k8s生产环境部署

    建议配置: 服务器 900G*2 SSD 安装操作系统 CPU 16核心*2 40G网卡*2 RAM 64G*8 操作系统建议:Centos7.4/Centos 7.6 不建议使用CentOS8 分布 ...

  9. 17.python文件处理

    原文:https://www.cnblogs.com/linhaifeng/articles/5984922.html 文件处理流程: 1. 打开文件,得到文件句柄并赋值给一个变量2. 通过句柄对文件 ...

  10. DOCKER学习_006:Docker存储驱动

    一 镜像的分层特性 在说docker的文件系统之前,我们需要先想清楚一个问题.我们知道docker的启动是依赖于image,docker在启动之前,需要先拉取image,然后启动.多个容器可以使用同一 ...