题意:你一开始有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. 倒排列表求交集算法 包括baeza yates的交集算法

    #ifndef __INTERSECT_HPP__ #define __INTERSECT_HPP__ #include "probe.hpp" namespace themas ...

  2. LA-3905 (扫描线)

    题意: 给一些流星的初始位置和运动向量,给了相机的拍摄范围;问你最多能拍到多少颗流星; 思路: 将流星用出现在相机拍摄范围内的时间段表示;sort后在扫面端点更新最大值; Ac代码: #include ...

  3. python中optparse模块用法

    optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数. 首先需要引入optparser模块,然后执行初始化,实例化一个OptionParser对象(可以带参,也可以不带 ...

  4. POJ2142:The Balance (欧几里得+不等式)

    Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. F ...

  5. AutoIt获取Gridview中可以修改列的值

    有一个界面如上图:黑色框框部分是一个整体,也是一个gridview,如果我想把框框中右侧数据获取出来,该如何操作? 我尝试过了很多途径,都无法成功. 今天,我发现,当鼠标焦点在黑色框框左侧的部分的时候 ...

  6. 构建Docker平台【第一篇】环境准备

    主机信息 操作系统版本 CentOS-7-x86_64-Everything-1511   主机A 192.168.6.128 主节点 主机B 192.168.6.129 主节点 主机C 192.16 ...

  7. vs 发布网站的时候不编译

    vs2010 vs2008

  8. View Controller Programming Guide for iOS---(四)---Creating Custom Content View Controllers

    Creating Custom Content View Controllers 创建自定义内容视图控制器 Custom content view controllers are the heart ...

  9. 张高兴的 .NET Core IoT 入门指南:(三)使用 I2C 进行通信

    什么是 I2C 总线 I2C 总线(Inter-Integrated Circuit Bus)是设备与设备间通信方式的一种.它是一种串行通信总线,由飞利浦公司在1980年代为了让主板.嵌入式系统或手机 ...

  10. python 测试用例

    mydict.py代码如下: class Dict(dict): def __init__(self, **kw): super().__init__(**kw) def __getattr__(se ...