UVA 10900 So you want to be a 2n-aire? 2元富翁 (数学期望,贪心)
题意:你一开始有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元富翁 (数学期望,贪心)的更多相关文章
- UVa 10900 So you want to be a 2n-aire? (概率DP,数学)
题意:一 个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏, 获得当 前奖金:回答下一道问题,答对的概率p在t到 ...
- uva 10828 高斯消元求数学期望
Back to Kernighan-RitchieInput: Standard Input Output: Standard Output You must have heard the name ...
- 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& ...
- UVa 1639 - Candy(数学期望 + 精度处理)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 12230 - Crossing Rivers(数学期望)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 10900 - So you want to be a 2n-aire?
题目大意: 一个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏,获得当前奖金:回答下一道问题,答对的概率p在t到 ...
- uva 10900
题意一直没看懂~~~~不过看懂了之后还是感觉挺好的 #include<cstdio> #include<cstring> #include<algorithm> # ...
- 【概率】Uva 10900 - So you want to be a 2n-aire?
写完这题赶紧开新题... 话说这题让我重新翻了概率论课本,果然突击完了接着还给老师了,毫无卵用. 很多人拿这位大神的题解作引,在这我也分享给大家~ 对于其中的公式在这里做一点简要的说明.因为自己也是理 ...
- UVa 10900 (连续概率、递推) So you want to be a 2n-aire?
题意: 初始奖金为1块钱,有n个问题,连续回答对i个问题后,奖金变为2i元. 回答对每道题的概率在t~1之间均匀分布. 听到问题后有两个选择: 放弃回答,拿走已得到的奖金 回答问题: 如果回答正确,奖 ...
- So you want to be a 2n-aire? UVA - 10900(概率)
题意: 初始值为1, 每次回答一个问题,如果答对初始值乘2,答错归0,结束,一共有n个问题,求在最优的策略下,最后值的期望值 解析: 注意题中的一句话 每个问题的答对概率在t和1之间均匀分布 也就 ...
随机推荐
- iOS之strong和copy
深拷贝和浅拷贝 深拷贝和浅拷贝主要是对类类型而言的,浅拷贝就是指针拷贝,深拷贝是对象拷贝. property的strong和copy 在接触iOS程序时经常会看到程序某些类类型属性被strong修饰, ...
- 理解iOS Event Handling
写在前面 最近的一个iOS App项目中遇到了这么问题:通过App访问服务器的大多数资源不需要登录,但是访问某些资源是需要用户提供验证的,一般来说,通常App的做法(譬如美团App)将这些资源放在“我 ...
- 「USACO」「LuoguP2731」 骑马修栅栏 Riding the Fences(欧拉路径
Description Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编 ...
- 架构:MVVC
ylbtech-架构:MVVC MVVM是Model-View-ViewModel的简写.它本质上就是MVC 的改进版.MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻 ...
- nodejs 全局对象 global
nodejs中有一个全局对象 global,所有的全局变量都是global对象的属性,glabal最根本的作用是作为全局变量的宿主, 全局变量: 1 在最外层定义的变量 2 全局对象的属性 3 隐式定 ...
- 6-8 adaboost分类器2
重点分析了Adaboost它的分类结构,以及如何使用Adaboost.这一节课讲解Adaboost分类器它训练的步骤以及训练好之后的XML文件的文件结构.所以这节课的核心是Adaboost分类器它的训 ...
- GCC在C语言中内嵌汇编 asm __volatile__
2012-11-26 22:20 17958人阅读 评论(2) 收藏 举报 分类: linux(59) 架构管理(24) C/C++(59) 目录(?)[+] 在内嵌汇编中,可以将C语言表达式 ...
- POJ 1384【完全背包】
题意: 已知储蓄罐满时的质量f以及空时质量e, 有n种硬币,每种硬币的价值为p,质量为w, 求该储蓄罐中的最少有多少钱? 思路: 完全背包思想,问题是在一个重量下的最小价值 那么只要变一下符号就好了? ...
- 2016 Multi-University Training Contest 3 1011【鸽巢原理】
题解: 坐标(0,m)的话,闭区间,可能一共有多少曼哈顿距离? 2m 但是给一个n,可能存在n(n+1)/2个曼哈顿距离 所以可以用抽屉原理了 当n比抽屉的数量大,直接输出yes 不用计算 那...N ...
- python 字符串操作一
一.创建字符串 >>> s1 = '12345' >>> s1 '12345' >>> s2 = str(12345) >>> ...