Luogu P4550 收集邮票
题目链接:Click here
Solution:
本题直接推价格似乎很难,考虑先从购买次数入手
设购买次数\(g(i)\)为当前有\(i\)种不同的邮票,要买到\(n\)种的期望购买次数
可以由期望的定义得到式子:\(g(x)=\sum_{i=0}^{+\infty}P(i,x)\),其中\(P(i,x)\)为买\(i\)次从\(x\)种买到\(n\)种的概率
对于一个局面,记它可以转移到的局面集合为\(to\),则它的期望可以表示为
\]
其中\(P(v)\)表示从\(v\)局面转移到\(u\)局面的概率,\(cost(v,u)\)表示从\(v\)转移到\(u\)局面的的代价
那么对于本题也可以如此转化:\(g(x)=\frac{x}{n}(g(x)+1)+\frac{n-x}{n}(g(x+1)+1)\)
也很好理解,因为再抽一张卡,可能抽到已经抽到的,也可能抽到新的,而转移的代价都为1
显然,\(g(n)=0\),再把式子转化一下,就可以得到\(g(x)\)的计算方式:
g(x)=g(x+1)+\frac{n}{n-x}
\]
然后我们再考虑设\(f(i,j)\)表示当前有\(i\)种邮票,下次购买要花\(j\)元时,买到\(n\)种的期望花费
我们知道购买要\(j\)元,结合题意,就能很好的推出\(f(i,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_{u=0}\frac{u(2j+u-1)}{2}P(u,i)\\
\]
这里\(P\)的定义同上文\(g(x)\)定义式中的\(P\),然后我们再考虑表示\(f(i,j+1)\),很简单,带入即可
\]
考虑表示将\(f(i,j+1)\)减去\(f(i,j)\)可得:\(f(i,j+1)-f(i,j)=\sum_{u=0}uP(u,i)\)
可以发现它与前面的期望定义式是一样的,则我们得到式子:\(f(i,j+1)=f(i,j)+g(i)\)
则我们可以把\(f(i,j)\)表示一下:
f(i,j)=\frac{i}{n}(f(i,j)+g(i))+\frac{n-i}{n}(f(i+1,j)+g(i+1))+j
\]
事实上我们只需求出\(f(0,1)\),而在递推中可以发现\(j\)是没有变化的,则可以直接忽略\(j\)
\frac{n-i}{n}f(i)=\frac{i}{n}g(i)+\frac{n-i}{n}f(i+1)+\frac{n-i}{n}g(i+1)+1\\
f(i)=\frac{i}{n-i}g(i)+f(i+1)+g(i+1)+\frac{n}{n-i}
\]
Code:
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+1;
int n;double u,f[N],g[N];
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main(){
n=read();f[n]=g[n]=0;u=n;
for(int i=n-1;~i;i--) g[i]=g[i+1]+u/(u-i);
for(int i=n-1;~i;i--){
double x=i,y=n-i;
f[i]=f[i+1]+g[i+1]+x/y*g[i]+u/y;
}Pintf("%.2lf",f[0]);
return 0;
}
题外话:推的时候发现了另外一个式子:设\(P(x)\)表示用\(x\)步刚好取到所有邮票的概率,则:
P(x)=\frac{n!(n-1)^{x-n}}{n^x}
\]
式子也很好理解,保证最后取到没取到的那种,再取完其它的种类,剩下的步数只要不取到最后那枚就行
则本题也可以这样求:
E(0)=\sum_{i=n}^{+\infty}P(i)sum(i)
\]
然后对这个式子求个通项就行了,不过我还不会求。。。
Luogu P4550 收集邮票的更多相关文章
- P4550 收集邮票
P4550 收集邮票 题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由 ...
- 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 ...
- 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种邮票中的哪一种是等概率的, ...
随机推荐
- 快速安装create-react-app脚手架
create-react-app搭建react项目:https://blog.csdn.net/weixin_41077029/article/details/82622106 快速安装create- ...
- mysql 聚合函数(2)
平均 svg select avg(sal + IFNULL(comm,0)) as avg_sal from t_emp 总和 sum select sum(sal + IFNULL(comm,0) ...
- 常用的PHP函数封装,有排序和数据库操作函数
//二分查找 function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low + $hi ...
- luogu P2791 幼儿园篮球题
传送门 先看我们要求的是什么,要求的期望就是总权值/总方案,总权值可以枚举进球的个数\(i\),然后就应该是\(\sum_{i=0}^{k} \binom{m}{i}\binom{n-m}{k-i}i ...
- MVC和MVVM设计模式简单理解
1.mvc设计模式理解 Model: 模型 持有所有的数据状态和业务逻辑; 泛指数据库,链接数据库,建立数据模型 View: 视图 用来展示数据模型在页面上,泛指前端 Controller: 控制器, ...
- mysql数据库之存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该 ...
- Android判断是debug还是release模式
1.当有些功能不希望在release模式实现时,但是debug模式又需要的时候,就可以对当前版本模式进行判断.如是debug模式则日志输出级别设置为Level.DEBUG,release模式设置为Le ...
- 2019-11-29-WPF-轻量级-MVVM-框架入门-2.1.2
title author date CreateTime categories WPF 轻量级 MVVM 框架入门 2.1.2 lindexi 2019-11-29 10:16:10 +0800 20 ...
- kill - 终止进程
SYNOPSIS(总览) kill[-ssignal|-p][-a]pid... kill -l [ signal ] DESCRIPTION (描述) kill 给指定进程发送指定信号. 如果没有指 ...
- laravel5.8 源码分析(1) Route
https://learnku.com/docs/laravel/5.8 源码路径 vendor\laravel\framework\src\Illuminate\Routing\Router.php ...