【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种不同的邮票,皮皮想收集所有种类的邮票.唯一 ...
随机推荐
- github/gitlab同时管理多个ssh key
之前一直用github,但是github有一个不好的地方,要是创建私有的项目的话需要付费,而gitlab上则可以免费创建管理私有的项目.由于最近想把自己论文的一些东西整理一下,很多东西还是不方便公开, ...
- 爱奇艺2017秋招笔试(C++智能设备方向)
虽然有方向,但是好像题目都是随机题库抽取. 选择题都很基础...挖坑,待更新 编程: 一. 奇异数: 如果一个数字满足以下条件,我们就称它为奇异数: 1. 这个数字至少有两位 2. 这个数的最低两 ...
- hibernate坑边闲话
使用hibernate各种各样的坑 Remember that ordinal parameters are 1-based node to traverse cannot be null 这两个错误 ...
- 百度地图开发者API学习笔记一(转载)
一,实现功能: 在地图上标记点,划线等操作.如下图. 2.代码: <!DOCTYPE html> <html> <head> <meta http-equiv ...
- Nginx三部曲(2)性能
我们会告诉你 Nginx 如何工作及其背后的理念,还有如何优化以加快应用的性能,如何安装启动和保持运行. 这个教程有三个部分: 基本概念 —— 这部分需要去了解 Nginx 的一些指令和使用场景,继承 ...
- 遍历List过程中删除操作报java.util.ConcurrentModificationException错误
1:遍历List 同时 remove 元素,出现java.util.ConcurrentModificationException错误 @Test public void test3(){ List& ...
- java Date时间的各种转换方式和Mysql存时间类型字段的分析
一:各种Date之间的转换方法 public class TimeTest { public static void main(String[] args) { Date date = new Dat ...
- Android——SMS接收发短信与运行权限
好久没写了,最近学习Android的相关知识,包括UI组件与布局.Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager.S ...
- linux apache tomcat 安装和升级
一,安装tomcat 注意!安装tomcat前需安装配置JDK,安装方式请参照这篇文章: http://www.cnblogs.com/blog4matto/p/5582054.html 1 tomc ...
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...