【BZOJ1426】收集邮票 期望DP
题目大意
有\(n\)种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是\(n\)种邮票中的哪一种是等概率的,概率均为\(\frac{1}{n}\)。但是由于凡凡也很喜欢邮票,所以皮皮购买第\(k\)张邮票(注意是第\(k\)张而不是第\(k\)种)需要支付\(k\)元钱。现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。
\(n\leq 10000\)
题外话
如果买第\(k\)种需要\(k\)元钱要怎么做?
已经买了\(i\)张,买到下一张需要的期望钱数是\(\frac{n}{n-i}\times\frac{n+1}{2}\)
所以总的代价是
\]
可惜这题没那么简单。
题解
设\(p(x,i)\)为已经买了\(i\)个物品,通过\(x\)次购买买完剩下的物品的概率
设\(g_i\)为已经买到了\(i\)个物品,买完所有物品的期望次数
\]
下一次买到想要的物品的概率为\(\frac{n-i}{n}\),取倒数就是期望
还有一条式子
\]
买\(x\)次成功的概率乘以\(x\)
设\(f_{i,j}\)为已经买到了\(i\)个物品,之间买过\(j\)次,买完所有物品的花费
有一个递推式
\]
f_{i,j}&=\sum_{x=1}^\infty ((j+1)+(j+2)+\cdots(j+x))\times p(x,i)\\
&=\sum_{x=1}^\infty \frac{x(x+2j+1)}{2}\times p(x,i)
\end{align}
\]
作差得
f_{i,j+1}=f_{i,j}+g_i\\
\]
代入到递推式中得
f_{i,j}&=(f_{i,j}+g_i)\times\frac{i}{n}+(f_{i+1,j}+g_{i+1})\times\frac{n-i}{n}+(j+1)\\
f_{i,j}&=\frac{i}{n}f_{i,j}+\frac{i}{n}g_{i}+\frac{n-i}{n}f_{i+1,j}+\frac{n-i}{n}g_{i+1}+(j+1)\\
f_{i,j}&=\frac{i}{n-i}g_{i}+f_{i+1,j}+g_{i+1}+\frac{n}{n-i}(j+1)
\end{align}
\]
可以发现\(f_{i,j}\)只和\(j\),\(f_{i+1,j}\),\(g_{i}\),\(g_{i+1}\)有关。因为我们只要求\(f_{0,0}\),所以可以把\(j\)那一维删去
\]
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
double g[100010];
double f[100010];
int main()
{
int n;
scanf("%d",&n);
int i;
g[n]=0;
for(i=n-1;i>=0;i--)
g[i]=g[i+1]+double(n)/(n-i);
f[n]=0;
for(i=n-1;i>=0;i--)
f[i]=f[i+1]+double(i)/(n-i)*g[i]+g[i+1]+double(n)/(n-i);
printf("%.2lf\n",f[0]);
return 0;
}
【BZOJ1426】收集邮票 期望DP的更多相关文章
- 【BZOJ】1426: 收集邮票 期望DP
[题意]有n种不同的邮票,第i次可以花i元等概率购买到一种邮票,求集齐n种邮票的期望代价.n<=10^4. [算法]期望DP [题解]首先设g[i]表示已拥有i张邮票集齐的期望购买次数,根据全期 ...
- 收集邮票 (概率dp)
收集邮票 (概率dp) 题目描述 有 \(n\) 种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是 \(n\) 种邮票中的哪一种是等概率 ...
- 2018.08.31 bzoj1426 收集邮票(期望dp)
描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以 ...
- 【BZOJ1426】收集邮票 期望
[BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的, ...
- bzoj1426: 收集邮票(期望)
推错半天式子T T 设f[i]为买了i种卡,期望再买几张有n种卡 设g[i]为买了i种卡,期望再花多少钱有n种卡 可以把当前买卡的价格看作1,则以后买的所有卡片要增加1元,于是要加上f[i]和f[i+ ...
- bzoj1426 (洛谷P4550) 收集邮票——期望
题目:https://www.luogu.org/problemnew/show/P4550 推式子……:https://blog.csdn.net/pygbingshen/article/detai ...
- 【BZOJ1426】收集邮票 概率DP 论文题 推公式题
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- 嘴巴题7 BZOJ1426: 收集邮票
Time Limit: 1 Sec Memory Limit: 162 MB Submit: 546 Solved: 455 [Submit][Status][Discuss] Description ...
- Bzoj1426 收集邮票
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 292 Solved: 232 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一 ...
随机推荐
- Django 的路由层 视图层 模板层
--------------------------------------------------------------通过苦难,走向欢乐.——贝多芬 Django-2的路由层(URLconf) ...
- elasticsearch(6.2.3)安装Head插件
一.安装elasticsearch,参照:https://www.cnblogs.com/dyh004/p/8872443.html 二.安装nodejs,参照:https://www.runoob. ...
- 辨析element.offsetXxxx和element.style.xxxx
DOM操作时,经常使用element.style属性,没错,element.style是属性,和几个offsetXxxx属性一样,概念是一样的. 但是style有几个属性,这几个属性和offsetXx ...
- CSS响应式布局实例
<style type="text/css"> body{ margin:0 auto; min-width: ...
- Java8 Lambda和Stream的用法
package com.zhangxueliang.demo; import java.util.ArrayList; import java.util.List; import java.util. ...
- java使用顺序存储实现队列
详细连接 https://blog.csdn.net/ljxbbss/article/details/78135993 操作系统:当电脑卡的时候,如果不停点击,还是卡死,最后终于电脑又好了以后,操作 ...
- 如何使用Action.Invoke()触发一个Storyboard
一般在我们的项目中,最好是将Storyboard放在前台,然后设置Storyboard的x:key值,通过我们的TryFindResource来查找到当前的Storyboard来启动Stroyboar ...
- vue element-ui 绑定@keyup事件无效
解决办法: <el-input @keyup.native="ajax"></el-input> 加上.native覆盖原有封装的keyup事件即可
- 在delphi中生成GUID
什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...
- Vue之动态绑定CSS样式
demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...