题意:你一开始有1元钱,接下来又n<=30个问题,只需答对1个问题手上的钱就翻倍,最多答对n个,得到的钱是2n。而每个问题答对的概率是[t,1]之间平均分布,那么问最优情况下得到奖金的期望值是多大?

思路:这题还有最优的情况!而且概率还是均匀连续分布的。

  分析一下:

  (1)如果不回答问题,直接拿1元,百分百能带走。

  (2)最优在可以有两种选择:可以在第i+1个问题面前选择不回答,可拿到2i元期望值,而选择回答也能拿到一定的期望值。而必须根据答对这个问题的概率来决定到底是如何选择。这个可以在坐标轴上表示出来。

  (3)假设只有1个问题,那么最多可以带走21元,而回答这个问题的期望是多少?是max(20, p*21),这个max并不是表示单纯的二选一,而是表示在概率t~1上面的二选一。假设概率是t=0.2,那么如果回答这个问题的概率p=[0.2,0.5],我会选择不回答,即寄望是前者的1元;概率在p=[0.5,1],我会选择回答,那么期望就是2*p>=1啦,比前者要好。这个画坐标轴的话,前者是直线段,后者是向右上方向的直线段。

  (4)在第3中,我们是假设了只有1个问题,如果有2,3,4个呢?看只有2个的,我们先算算回答第一个问题,max(20,p*x),x是表示后面那个问题所能拿到的最大期望值,还没有算呢。所以,必须算出最后一个问题,知道了第n个问题的最大期望值后,才能算第n-1个问题的最大期望值。

  (5)如何求答案?设d[i]为在回答第i个问题时的最大期望,我们要逆推d数组,最后的d[0]就会是答案,因为d[0]就是回答第一个问题所能拿到的最大期望值(相当于将所有问题绑定,看成只有1个问题,要么不回答,要么回答,而回不回答是看概率的)。假设回答的概率在[t,p0],不回答的概率在[p0,1],那么不回答这个问题的概率是(p0-t)/(1-t)。第i个问题的最大期望=不回答时的期望+回答时的期望=2i*p1 + (1+p0)/2*d[i+1]*(1-p1)。

    

  上图中就是处于一个问题时的情况,直线y1表示不回答能得到的期望,直线y2表示回答时能得到的期望。观察发现,如果p在[p0,1]这一段区间内还是选择y2比较好,而p在[t, p0]这一段区间内还是选择y1比较好(即不回答)。他们各自的面积之和就是遇到这个问题时的期望了。所以现在的问题是求p0,po=max(t,2i/d[i+1]),这里需要取max是因为y1和y2的交点可能在[0,t]之间。

 #include <bits/stdc++.h>
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=;
double d[N]; int main()
{
//freopen("input.txt", "r", stdin);
int n;
double t;
while(scanf("%d%lf", &n, &t), n)
{
d[n]=(<<n);
for(int i=n-; i>=; i--)
{
double p0=max(t, (double)(<<i)/d[i+] ); //两条直线的交点的x坐标。
double p1=(p0-t)/(-t); //不回答的概率
d[i]=(<<i)*p1 + (+p0)/*d[i+]*(-p1); //前部分是不回答,后部分是回答。
}
printf("%.3f\n", d[]);
}
return ;
}

AC代码

UVA 10900 So you want to be a 2n-aire? 2元富翁 (数学期望,贪心)的更多相关文章

  1. UVa 10900 So you want to be a 2n-aire? (概率DP,数学)

    题意:一 个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏, 获得当 前奖金:回答下一道问题,答对的概率p在t到 ...

  2. uva 10828 高斯消元求数学期望

    Back to Kernighan-RitchieInput: Standard Input Output: Standard Output You must have heard the name ...

  3. UVa 10900 - So you want to be a 2n-aire?(期望DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. UVa 1639 - Candy(数学期望 + 精度处理)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVa 12230 - Crossing Rivers(数学期望)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. UVa 10900 - So you want to be a 2n-aire?

    题目大意: 一个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏,获得当前奖金:回答下一道问题,答对的概率p在t到 ...

  7. uva 10900

    题意一直没看懂~~~~不过看懂了之后还是感觉挺好的 #include<cstdio> #include<cstring> #include<algorithm> # ...

  8. 【概率】Uva 10900 - So you want to be a 2n-aire?

    写完这题赶紧开新题... 话说这题让我重新翻了概率论课本,果然突击完了接着还给老师了,毫无卵用. 很多人拿这位大神的题解作引,在这我也分享给大家~ 对于其中的公式在这里做一点简要的说明.因为自己也是理 ...

  9. UVa 10900 (连续概率、递推) So you want to be a 2n-aire?

    题意: 初始奖金为1块钱,有n个问题,连续回答对i个问题后,奖金变为2i元. 回答对每道题的概率在t~1之间均匀分布. 听到问题后有两个选择: 放弃回答,拿走已得到的奖金 回答问题: 如果回答正确,奖 ...

  10. So you want to be a 2n-aire? UVA - 10900(概率)

    题意: 初始值为1, 每次回答一个问题,如果答对初始值乘2,答错归0,结束,一共有n个问题,求在最优的策略下,最后值的期望值 解析: 注意题中的一句话  每个问题的答对概率在t和1之间均匀分布  也就 ...

随机推荐

  1. iOS中键盘的收起

    在UIViewController中收起键盘,除了调用相应控件的resignFirstResponder方法之外,还有另外三种方法: 重载UIViewController中的touchesBegin方 ...

  2. 基于redis实现tomcat8的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)

    前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...

  3. http查看工具

    View HTTP Request and Response Header Web-Sniffer Desktop App Please check our new free Web-Sniffer ...

  4. RDA TDT & TOT

    首先看下面的TS PSI分析图: 注意:TOT UTC与TDT是一致的 TDT下的时间为: UTC+手动TIMEZONE TOT下的时间为: UTC+解析的time_offset time_offes ...

  5. 03_主线程联网问题&ANR&子线程不能修改UI

    如果不使用HAXM,恐怕网页源码查看器无法获取servlet的源码.初步猜测是安卓模拟器运行速度太慢了.如果CPU不支持VT-x的话,HAXM是安装不上的.所以可以先开启VT-x. 可以参考几篇文章h ...

  6. centos查看CPU的数量

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...

  7. touch的基本用法

    touch的基本功能是改变文件的时间戳,以下是三种常用用法: 1.创建一个空文件 以当前时间为时间戳创建一个空文件.$ touch touch.txt //touch.txt不存在 2.更改文件时间戳 ...

  8. 为什么wait,notify和notifyAll要与synchronized一起使用?

    https://blog.csdn.net/qq_39907763/article/details/79301813 Object.wait(),Object.notify(),Object.noti ...

  9. PHP读取MySQL数据

    方法/步骤     先配置一下数据库: define("DB_HOST","localhost");//数据库地址,一般为localhost define(&q ...

  10. codeforces 149D Coloring Brackets (区间DP + dfs)

    题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红 ...