bzoj1426 收集邮票(递推+概率期望)
来源:互联网 发布:外贸邦海关数据 编辑:程序博客网 时间:2024/06/06 04:08
分析:
和这道题蛮像的,主要分析转自这里
受到UVa10288启发之后,我们就可以很容易的求出g[i]表示当前有i张邮票,得到n张得期望步数
同时我们定义pr(x,i)表示买x次能从i种买到n种的概率
实际pr就是这个:
假设我们现在手里已经有了k图案,令s=k/n,拿一个新的图案需要t次的概率:s^(t-1)*(1-s)
则有
设计状态:f[i][j]表示现在有i张不同的邮票,下一次购买需要j+1元,得到n张邮票的期望花费
- i/n的概率,转移到f[i][j+1],花费是j
- (n-i)/n的概率,转移到f[i+1][j+1],花费是j
所以状态转移方程显而易见:
f[i][j]=j + f[i][j+1] * i/n + f[i+1][j+1] * (n-i)/n
但是f[i][j]的j是无限的,所以这个递推无法进行,考虑f[i][j]与f[i][j+1]的关系,有
且有
那么有f[i][j]关于f[i+1][j]的状态转移:
再来看看我们的求解,我们只关心f[0][1]是多少,所以,对于j不等于1的情况我们可以忽略
那么定义F[i]表示f[i][1],有
特别的,f[n][1]=0,所以F[n]=0
我们已知F[n]的值与g[0]~g[n]的值,那么我们就可以递推出f[0][1]=F[0]的值,问题到此就可以解决了
//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;double g[10010],f[10010];int n;int main(){ scanf("%d",&n); g[n]=0.0; for (int i=n-1;i>=0;i--) g[i]=g[i+1]+(double)n/(n-i); for (int i=n-1;i>=0;i--) f[i]=(((f[i+1]+g[i+1])*(double)(n-i)/n)+g[i]*(double)i/n+1.0)*(double)n,f[i]/=(double)n-i; printf("%.2lf",f[0]); return 0;}
阅读全文
0 0
- bzoj1426 收集邮票(递推+概率期望)
- bzoj1426 [收集邮票] 期望概率DP进阶
- 【BZOJ1426】收集邮票【期望DP】
- [bzoj1426]收集邮票 期望DP
- 【BZOJ1426】收集邮票 期望DP
- 【期望Dp】【bzoj1426】: 收集邮票
- 【BZOJ1426】收集邮票 概率DP 论文题 推公式题
- BZOJ1426 收集邮票
- bzoj1426收集邮票
- bzoj1426 收集邮票
- bzoj 1426: 收集邮票 (概率与期望)
- [BZOJ]1426 收集邮票 概率与期望
- 【bzoj 1426】收集邮票(期望DP)
- 概率DP 收集邮票
- (概率DP)正向推概率,反向推期望
- BZOJ 1426: 收集邮票 期望
- BZOJ3450 Easy-概率与期望-递推
- [BZOJ 1426]收集邮票:期望DP
- 第十三周项目1验证算法(2)
- 11周 项目3
- net WebApi中使用swagger
- OSN博士必须掌握的必杀技(更新至2017/12/15)
- iOS11 解决MBProgressHUD弹框不显示问题
- bzoj1426 收集邮票(递推+概率期望)
- ceph (luminous 版) primary affinity 管理
- sqlnet.ora
- MVP+断点续传
- java多种方式读文件,追加文件内容,对文件的各种操作
- Angular终结版
- myeclipse和eclipse 项目中的Libraries是空的
- eclipse debug (调试) 学习心得
- Android探索之旅(第二十五篇)腾讯热修复框架Tinker与阿里第三代热修复框架Sophix对比