P4550 收集邮票
P4550 收集邮票
题目描述
有n种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n。但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱。
现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。
输入格式
一行,一个数字N
N<=10000
输出格式
要付出多少钱.
保留二位小数
输入输出样例
3
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 收集邮票的更多相关文章
- P4550 收集邮票-洛谷luogu
传送门 题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢 ...
- bzoj1426 (洛谷P4550) 收集邮票——期望
题目:https://www.luogu.org/problemnew/show/P4550 推式子……:https://blog.csdn.net/pygbingshen/article/detai ...
- 洛谷P4550 收集邮票(概率期望)
传送门 神仙题啊……这思路到底是怎么来的…… ps:本题是第$k$次买邮票需要$k$元,而不是买的邮票标号为$k$时花费$k$元 我们设$g[i]$表示现在有$i$张,要买到$n$张的期望张数,设$P ...
- Luogu P4550 收集邮票
题目链接:Click here Solution: 本题直接推价格似乎很难,考虑先从购买次数入手 设购买次数\(g(i)\)为当前有\(i\)种不同的邮票,要买到\(n\)种的期望购买次数 可以由期望 ...
- P4550 收集邮票 与 灵异的期望
考前复习一下期望相关知识,这题的期望还是很巧妙的. 设 \(f_{i}\) 表示已经买到了 \(i\) 张不同的邮票的期望步数,\(g_{i}\) 表示表示已经买到了 \(i\) 张不同的邮票的期望花 ...
- [洛谷P4550]收集邮票
题目大意:有$n(n\leqslant10^4)$个物品,第$i$次会从这$n$个物品中随机获得一个,并付出$i$的代价,问获得所有的$n$个物品的代价的期望. 题解:令$f_i$表示现在已经获得了$ ...
- [P4550] 收集邮票 - 概率期望,dp
套路性地倒过来考虑,设\(f[i]\)表示拥有了\(i\)种票子时还需要多少次购买,\(g[i]\)表示还需要多少钱 推\(g[i]\)递推式时注意把代价倒过来(反正总数一定,从顺序第\(1\)张开始 ...
- 【BZOJ-1426】收集邮票 概率与期望DP
1426: 收集邮票 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 261 Solved: 209[Submit][Status][Discuss] ...
- 【BZOJ1426】收集邮票 期望
[BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的, ...
随机推荐
- Python--day46--MySQL自定义函数
1,mysql自定义函数(mysql函数会降低查找速度,使用 了函数的行和列不能再用索引查找了,这样对性能要求高的需求就不能这样写) 函数调用 select f(参数1,参数2): 对函数进行调用:
- 模板——Treap实现名次树
Treap 是一种通过赋予结点随机权值的一种满足堆性质的二叉搜索树,它很好的解决了二叉搜索树顺序插入组成链式的局限性. 名次树是指在treap的每个结点中添加附加域size,表示以它为根的子树的总结点 ...
- java异常处理格式
异常处理的5个关键字 try ,catch, finally throw, throws 我的总结: 捕获异常:先捕获小异常再捕获大异常. 程序是调出来的,不是写出来的:多测试是程序员的必修课. ...
- Chrome 里的请求报错 " Provisional headers are shown"
之所以会出现这个警告,是因为去获取该资源的请求其实并(还)没有真的发生; 背景:提交表单,按钮点击<button>标签,触发事件,ajax发送请求,服务器返回信息; <button& ...
- 2018-8-10-win10-uwp-win2d-离屏渲染
title author date CreateTime categories win10 uwp win2d 离屏渲染 lindexi 2018-08-10 19:17:19 +0800 2018- ...
- Linux 内核总线方法
有几个给 bus_type 结构定义的方法; 它们允许总线代码作为一个设备核心和单独驱动之 间的中介. 在 2.6.10 内核中定义的方法是: int (*match)(struct device * ...
- 防火墙TCP的单向控制
网络拓扑: 如上图所示,防火墙分为external/internal/dmz三个安全zone,其中10.133.1.100/32为dmz区的一台squid缓存服务器,10.158.1.10/32,10 ...
- python multiprocessing.freeze_support
Running on windows platform, give me an error as below: File "C:\Python\lib\multiprocessing\for ...
- lombok优缺点
优点: 能通过注解的形式自动生成构造器.getter/setter.equals.hashcode.toString等方法,提高了一定的开发效率 让代码变得简洁,不用过多的去关注相应的方法 属性做修改 ...
- 洛谷$P3749$ [六省联考2017] 寿司餐厅 网络流
正解:网络流 解题报告: 传送门$QwQ$ 这道题好烦昂,,,就给了好多变量,,,但仔细读一遍题还是能$get$的所以我就不再提取一遍题目大意辣$QwQ$? 显然考虑建两排点,一排收益一排支出然后最小 ...