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. 解决vscode电脑卡顿问题

    在安装了vscode之后,发现电脑很卡,cpu使用率高达100%. 解决方法1: 打开vscode之后,点击文件==>首选项==>设置搜索设置search.followSymlinks然后 ...

  2. H3C 更新发送全部路由表浪费网络资源

  3. PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析    PHPmysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理 介绍 PDO是一种PHP程序连接数据库的接口 ...

  4. linux Completions 机制

    内核编程的一个普通模式包括在当前线程之外初始化某个动作, 接着等待这个动作结束. 这个动作可能是创建一个新内核线程或者用户空间进程, 对一个存在着的进程的请求, 或 者一些基于硬件的动作. 在这些情况 ...

  5. js操作改变原数组的解决方法

    最近在开发的时候发现js中的循环操作会改变原数组,var一个变量承接也不行 甚至连map方法都会改变原数组,下面是解决方法 let a = ['a','b','c'] let b = [[2, 0, ...

  6. H3C 指定下次启动加载的应用程序文件

  7. PowerShell 通过 WMI 获取系统信息

    本文告诉大家如何通过 WMI 使用 Win32_OperatingSystem 获取设备厂商 通过下面代码可以获取 系统版本和系统是专业版还是教育版 Get-WmiObject Win32_Opera ...

  8. luoguP2679 子串

    luoguP2679 子串 个人感觉\(noip\)系列中挺好的一道DP题目. 题面有点难理解. 我们设\(f_{i,j,k,0/1}\)表示\(A\)串前\(i\)个字符,匹配\(B\)串前\(j\ ...

  9. [板子]快速幂&矩阵快速幂

    不会的来这看:https://www.cnblogs.com/CXCXCXC/p/4641812.html 简单的一说:当转换为二进制的时候有位运算这种黑科技,&相当于%2判断奇偶性. x&a ...

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

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