UVa10900 - So you want to be a 2n-aire? (期望)
来源:互联网 发布:韩国研究生留学知乎 编辑:程序博客网 时间:2024/05/22 03:35
我们不妨设a[i]表示正确做完第i道题的收益的期望,显然我们最后要求的就是a[0]咯,但这个先放一放,我们先讨论一下在做第i+1个题目前我们是选择答题呢还是选择放弃呢。
首先,我们可以直观的想到,如果做完i题就退出的话,就可以得到2^i这么多钱。不妨假设答对第i+1个题的概率为p,那么我们自然会想到用p乘以“某个值”表示答题所获得的收益的期望,如果p乘以这个值大于2^i的话,我们肯定会选择答题咯,因为若是这样答题的话收益的期望是大于不答题的。那么现在问题就来了,这个“某个值”是什么呢?可能的最大值?可能的最小值?还是平均值(或者说是期望)?
如果做个比喻的话,选最大值的就是冒险狂,选最小值的就是胆小鬼,选平均值的就是接受过良好高等教育的ACMer,一开始我就成了冒险狂……
后来想想,也确实只有平均值在统计里面才比较有说服力,因此题目中所谓的plays the best strategy就是按我们上面所说的去决策每次究竟是答题还是不答题。上面我们只是对于p是固定值来讨论的,如果我们对p是任意的去讨论的话,显然不答题的平均收益是不变的,因为它和p没关系,仍是2^i,如果答题的话平均收益就应该是(ep+1)/2*a[i+1],ep就是我们前面讨论的“分水岭”,用表达式写出来就是ep=2^i/a[i+1],当p>ep,那么p*a[i+1]>2^i,也就是说如果答对这个题我就可以获得a[i+1]这么多钱,再乘答对的概率p就是答第i+1题的收益的期望,如果这个期望大于2^i,那么就会选择答题。当然题目中让算的是总收益,我们再各自乘以答题与否这些情况出现的概率即可,即a[i]=(ep-t)/(1-t)*2^i+(t-ep)/(1-t)*(ep+1)/2*a[i+1],这个式子值列出了ep>t的情况,对于ep<=t的情况,也可以类似写出表达式。
现在我们就发现了,计算a[i]是需要用到a[i+1]的,那我们怎么办?倒着算呗。那么a[N]是多少?显然是2^N,因为答对第N个题之后收益的期望自然就是最大的收益。
#include<stdio.h>#include<string.h>#include<math.h>#define MAXD 35int N;double T,q[MAXD];void solve(){ int i,j,k; double eq,f=1,quit; f=q[N]; for(i=N-1;i>=0;i--){ quit=q[i]; eq=quit/f; if(eq<=T) f=(T+1)/2*f; else f=(eq-T)/(1-T)*quit+(1-eq)/(1-T)*(eq+1)/2*f; } printf("%.3lf\n",f);}int main(){ q[0]=1; for(int i=1;i<=30;i++) q[i]=2*q[i-1]; for(;;){ scanf("%d%lf",&N,&T); if(!N) break; if(fabs(1-T)<1e-9) printf("%.3lf\n",q[N]); else solve(); } return 0;}
- uva10900 So you want to be a 2n-aire?
- UVa10900 - So you want to be a 2n-aire? (期望)
- uva10900 - So you want to be a 2n-aire? 概率 递推
- UVA10900 So you want to be a 2n-aire?(概率dp)
- uva 10900 - So you want to be a 2n-aire?(期望)
- UVa 10900 - So you want to be a 2n-aire? 期望
- HDOJ 1145 So you want to be a 2n-aire? 期望DP
- hdu1145.So you want to be a 2^n-aire?
- So you want to be a 2n-aire?
- So you want to be a 2n-aire? UVA
- UVA 10900 So you want to be a 2n-aire?
- UVA 10900 - So you want to be a 2n-aire?(概率)
- hdu 1145 So you want to be a 2n-aire?
- UVA - 10900So you want to be a 2n-aire?(连续概率)
- 杭电1145 so you want to be a 2n-aire?
- uva 10090 So you want to be a 2n-aire?
- UVa 10900 So you want to be a 2n-aire?
- So you want to be a CIO
- iOS开发的知名个人博客
- Windows下使用android NDK(JNI)调用OpenCV本地代码——流程梳理
- Spring学习笔记
- 安卓基础 论MediaPlayer的应用(二)
- windos系统快捷键
- UVa10900 - So you want to be a 2n-aire? (期望)
- 5.18
- 黑马程序员-----多线程
- join(inner join)、left join、right join、full join的区别(摘自w3c)
- Message: could not initialize proxy - no Session org.hibernate.LazyInitializationException: could no
- Project Euler Problem 7
- 象观敏捷之旅-初探DDD
- MySQL数据库优化技巧
- POJ 2421 Constructing Roads