链接:

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

题意:

在一个电视娱乐节目中,你一开始有1元钱。主持人会问你n个问题,每次你听到问题后有两个选择:
一是放弃回答该问题,退出游戏,拿走奖金;二是回答问题。
如果回答正确,奖金加倍;如果回答错误,游戏结束,你一分钱也拿不到。
如果正确地回答完所有n个问题,你将拿走所有的2^n元钱,成为2^n元富翁。
当然,回答问题是有风险的。每次听到问题后,你可以立刻估计出答对的概率。
由于主持人会随机问问题,你可以认为每个问题的答对概率在t和1之间均匀分布。
输入整数n和实数t(1≤n≤30,0≤t≤1),你的任务是求出在最优策略下,拿走的奖金金额的期望值。
这里的最优策略是指让奖金的期望值尽量大。

分析:

假设刚开始游戏,如果直接放弃,奖金为1;如果回答,期望奖金为(p * 答对1题后的最大期望奖金)。
用d[i]表示“答对i题后的最大期望奖金”,再加上“不回答”时的情况,可以得到:
若第1题答对概率为p,期望奖金的最大值 = max{2^0, p*d[1]},
这里故意写成2^0,强调这是“答对0题后放弃”所得到的最终奖金。
上述分析可以推广到一般情况,但是要注意一点:到目前为止,一直假定p是已知的,
而p实际上并不固定,而是在t~1内均匀分布。可以得到:d[i] = max{2^i, p*d[i+1]}。
因为有max函数的存在,需要分两种情况讨论,即p*d[i+1]<2^i和p*d[i+1]≥2^i两种情况。
令p0=max{t, 2^i/d[i+1]}(加了一个max是因为根据题目,p≥t),则:
p<p0时,p*d[i+1]<2^i,因此“不回答”比较好,期望奖金等于2^i。
p≥p0时,“回答”比较好,期望奖金等于d[i+1]乘以p的平均值,即(1+p0)/2 * d[i+1]。
在第一种情况中,p的实际范围是[t,p0),因此概率为p1=(p0-t)/(1-t)。
根据全期望公式,d[i] = 2^i * p1 + (1+p0)/2 * d[i+1] * (1-p1)。
边界是d[n] = 2^n,逆向递推出d[0]就是本题的答案。

代码:

 #include <cstdio>
#include <algorithm>
using namespace std; const int UP = + ;
double d[UP]; int main() {
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+]);
double p1 = (p0-t) / (-t);
d[i] = p1 * (<<i) + (-p1) * (+p0)/ * d[i+];
}
printf("%.3f\n", d[]);
}
return ;
}

UVa 10900 - So you want to be a 2n-aire?(期望DP)的更多相关文章

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

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

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

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

  3. UVA - 11584 划分字符串的回文串子串; 简单dp

    /** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...

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

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

  5. uva 10900

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

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

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

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

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

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

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

  9. UVA 10900 So you want to be a 2n-aire? 2元富翁 (数学期望,贪心)

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

随机推荐

  1. golang操作mysql数据库

    golang操作mysql数据库 代码: mysql的增.删.改.查 package main import ( "database/sql" "fmt" &q ...

  2. C# OO(初级思想)。

    继承,多态,封装 在C#中,为了能够合理描述自然界的规律,面向对象的编程引入了继承的概念,是面向对象编程中最重要的概念之一,定义了如何根据现有的类创建新类的过程. 继承:一个类派生出来的子类具有这个类 ...

  3. .net core 导出excel

    1.使用NuGet 安装 EPPlus.Core, 2.代码如下 using OfficeOpenXml; using OfficeOpenXml.Style; public IActionResul ...

  4. apache 优化配置详解

    ###=========httpd.conf begin===================##Apache主配置文件##设置服务器的基础目录,默认为Apache安装目录ServerRoot &qu ...

  5. groovy和java的主要区别

    1.Default imports,默认情况下,导入下面的包: java.io. * java.lang.* java.math.BigDecimal中 java.math.BigInteger中 j ...

  6. 【SSH网上商城项目实战17】购物车基本功能的实现

    转自:https://blog.csdn.net/eson_15/article/details/51418350 上一节我们将商品的详细页面做完了,并使用了Hibernate的二级缓存加载详细页面来 ...

  7. EF框架CodeFirst the model backing the 'PModelEntities' context has changed since the database was created. Consider using Code First Migrations to update the database

    1.采用code first 做项目时,数据库已经生成,后期修改数据库表结构.再次运行时出现一下问题: Entity Framework : The model backing the 'Produc ...

  8. Foxmail邮件收取网易企业邮件配置

  9. 由上一个血案引发的关于property和attribute关系的思考

    boss说,学习要刨根问底. 好的,开刨. 一.property和attribute在英语里有什么区别 看似没有区别.但其实大神说: property是 物体本身自带属性,不能改变的(一旦改了就是另外 ...

  10. Access MetaData

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...