【BZOJ-1426】收集邮票 概率与期望DP
1426: 收集邮票
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 261 Solved: 209
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
Source
Solution
第一次见概率题这么做的...好厉害
首先我们定义$g[i]$表示现在有$i$张,要买到$n$张的期望次数;
定义$P(x,i)$为买$x$次能从$i$种买到$n$种的概率。
那么可以得到:
$$g[i]=\sum _{x=0}^{\infty }x*P(x,i)$$
那么就有:
$$g[i]=g[i]*\frac{i}{n}+g[i+1]*\frac{n-i}{n}+1$$
$$g[i]-g[i]*\frac{i}{n}=g[i+1]*\frac{n-i}{n}+1$$
$$g[i]*\frac{n-i}{n}=g[i+1]*\frac{n-i}{n}+1$$
$$g[i]=(g[i+1]*\frac{n-i}{n}+1)*\frac{n}{n-i}$$
得到$g[i]=g[i+1]+\frac{n}{n-i}$ ,且知道$g[n]=0$
那么我们设$f[i][j]$表示还现在有$i$张,下一张是$j$元,买到$n$张的期望
显然$f[i][j]$到$f[i][j+1]$的概率是$\frac{i}{n}$,到$f[i+1][j+1]$的概率是$\frac{n-i}{n}$,并且付出的代价都是$j$
所以转移显然:
$$f[i][j]=\frac{i}{n}*f[i][j+1]+\frac{n-i}{n}*f[i+1][j+1]+j$$
但是$f[i][j]$是的递推是无穷大的,所以不能直接递推,考虑它的一些性质:
$$f[i][j]=\sum_{x=0}^{\infty }[j+(j+1)+...+(x+j-1)]*P(x,i)$$
显然是个等差数列求和,所以可以得到:
$$f[i][j]=\sum _{x=0}^{\infty }\frac{x*[(j)+(x+j-1)]}{2}*P(x,i)$$
然后我们作差$f[i][j+1]-f[i][j]$得到:
$$f[i][j+1]-f[i][j]=\sum_{x=0}^{\infty}x*P(x,i) \Leftrightarrow f[i][j+1]-f[i][j]=g[i]$$
所以我们就可以对开始时$f[i][j]$这个式子进行化简,得到:
$$f[i][j]=f[i][j+1]*\frac{i}{n}+f[i+1][j+1]*\frac{n-i}{n}$$
$$\Rightarrow f[i][j]=(f[i][j]+g[i])*\frac{i}{n}+(f[i+1][j]+g[i+1])*\frac{n-i}{n}+j$$
$$f[i][j]=\frac{[(f[i+1][j]+g[i+1])*\frac{n-i}{n}+g[i]*\frac{i}{n}+j]*n}{n-i}$$
然后我们发现$j$这一维其实是无效的,我们只需要知道$j=1$时的答案,所以我们在转移的时候忽略它,直接令$j=1$,并用$f[i]$表示$f[i][1]$,得到:
$$f[i]=f[i+1]+g[i+1]+g[i]*\frac{i}{n-i}+\frac{n}{n-i}$$
然后我们就可以线性时间得到答案了。
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
#define MAXN 10010
int N;
double g[MAXN],f[MAXN];
int main()
{
scanf("%d",&N);
for (int i=N-1; i>=0; i--) g[i]=g[i+1]+1.0*N/(N-i);
for (int i=N-1; i>=0; i--) f[i]=f[i+1]+g[i+1]+g[i]*1.0*i/(N-i)+1.0*N/(N-i);
printf("%.2lf\n",f[0]);
}
码量比思路量不知道小到哪去了!!
【BZOJ-1426】收集邮票 概率与期望DP的更多相关文章
- BZOJ 1426--收集邮票(概率与期望&DP)
1426: 收集邮票 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 504 Solved: 417[Submit][Status][Discuss] ...
- BZOJ 1426 收集邮票 ——概率DP
$f(i)$表示现在有$i$张,买到$n$张的期望 所以$f(i)=f(i+1)+\frac {n}{n-i}$ 费用提前计算,每张邮票看做一元,然后使后面每一张加1元 $g(i)$表示当前为$i$张 ...
- BZOJ 1426: 收集邮票 数学期望 + DP
Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡 ...
- BZOJ 1426: 收集邮票 [DP 期望 平方]
传送门 题意: 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮 ...
- bzoj 1426: 收集邮票【期望dp】
我太菜了,看的hzwer的blog才懂 大概是设f[i]表示已经拥有了i张邮票后期望还要买的邮票数,这个转移比较简单是f[i]=f[i]*(i/n)+f[i+1]*((n-i)/n)+1 然后设g[i ...
- bzoj 1426:收集邮票 求平方的期望
显然如果收集了k天,ans=k*(k+1)/2=(k^2+k)/2.那么现在要求的就是这个东西的期望. 设f[i]表示已有i张邮票,收集到n张的期望次数,g[i]表示已有i张邮票,收集到n张的次数的平 ...
- bzoj 1426 收集邮票
f[i]:当前已拥有i种邮票,还需要买的邮票数的期望值. g[i]:当前已拥有i种邮票,还需要的钱的期望值. 每张邮票初始都是1元钱,每买一张邮票,还没购买的邮票每张都涨价1元. f[i]=1+(n ...
- 收集邮票 (概率dp)
收集邮票 (概率dp) 题目描述 有 \(n\) 种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是 \(n\) 种邮票中的哪一种是等概率 ...
- 【算法学习笔记】概率与期望DP
本文学习自 Sengxian 学长的博客 之前也在CF上写了一些概率DP的题并做过总结 建议阅读完本文再去接着阅读这篇文章:Here 前言 单纯只用到概率的题并不是很多,从现有的 OI/ACM 比赛中 ...
随机推荐
- iOS 学习 - 22 异步解析 JSON,使用 FMDB 存储,TableView 显示
前提是已经知道了有哪些 key 值 Model 类: .h @interface ListModel : NSObject @property (nonatomic, copy)NSString *t ...
- Lucene 时间排序
在Lucene4.4中,想要实现搜索结果按照时间倒序的效果:如果两个文档得分相同,那么就按照发布时间倒序排列:否则就按照分数排列.这种效果在Lucene4.6中实现起来极其简单,直接利用search接 ...
- JVM之方法区
基本特性: 线程共享区域,存储被JVM加载的类信息.常量.静态变量.即时编译器编译的代码等 堆的逻辑部分,不限定方法去内的内存位置和编译代码的管理策略,不限定实现垃圾回收 容量可不定也可动态扩展,不 ...
- ComboBox(下拉列表框)实现省、市、县三级联动,用hibernate连接数据库
package com.hanqi.web; import java.io.IOException; import java.util.List; import javax.servlet.Servl ...
- 《java JDK7 学习笔记》之继承与多态
1.面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承.应该正确判断使用继承的时机及继承之后灵活的运用多态,才是学习继承时的重点. 2.程序代码重复在程序设计上,就是 ...
- PuTTY配置
目录 1.作用? 2.中文问题解决 ? 3.GUI支持? 4.使用密钥对实现安全快捷的无密码登陆? 5.操作习惯(Alt+Enter全屏以及字体配置) 6.附录(sshd服务器配置) 1.作用? Pu ...
- linux中文件(档案)和目录的RWX权限意义
1 权限对文件的意义 权限对文件的意义很好理解,下面我们看看权限对目录的意义. 2 权限对目录的意义 档案是存放实际资料的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录档名清单,档名与目录有强 ...
- ubuntu下怎么给普通用户赋予sudo权限
ununtu系统安装过程中,系统会提示建立一个默认用户,比如用户名为:zhuhui.这个默认用户具有一定的管理功能,即可以通过sudo命令执行root权限的操作.由于Ubuntu系统默认不允许通过ro ...
- mycat高可用方案
1.建议采用标准的mysql主从复制高可用配置并交付给mycat来完成后端mysql节点的主从自动切换. 2.mycat自身的高可用性 由HAproxy+Mycat集群+Mysql主从所组成的高可用性 ...
- Vim自动补全神器–YouCompleteMe
一.简介 YouCompleteMe是Vim的自动补全插件,与同类插件相比,具有如下优势 1.基于语义补全 2.整合实现了多种插件 clang_complete.AutoComplPop .Super ...