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之间均匀分布 也就 ...
随机推荐
- 【Java】DateUtil(2)
import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...
- 后台while收发过程
fuse_loop_mt.c 中fuse_do_work函数使用while循环在后台不断运行,每一个while循环中,主要有两个操作. 1. fuse_session_receive_buf(mt-& ...
- 15个你不可不知的cmd命令
cmd和dos: dos是Disk Operating System 磁盘操作系统的缩写,它是个人计算机上的一类操作系统.跟Windows图像界面操作系统不同的是,dos是一种面向磁盘的操作系统,并且 ...
- maven(一)创建一个maven的web项目
一.创建项目 1.Eclipse中用Maven创建项目 上图中Next 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建 ...
- 【NOIP2014】 联合权值
[题目链接] 点击打开链接 [算法] 如果(u,v)的距离为2,那么有两种可能 : 1.u和v为祖孙关系 2.u和v为兄弟关系 树形DP即可,详见代码 [代码] #include<bits/st ...
- 【扬中集训DAY1T1】 微信群
[题目链接] 点击打开链接 [算法] 对问题稍加分析后,发现其实要求的就是 : C(N,K) + C(N,K+1) + C(N,K+2) + ... + C(N,N) 因为N最大10^9,K最大10^ ...
- const 和指针
c++用了那么久,觉得 const 和指针配合到一起的时候就会有点点分不出来. 如下: const Data* pData; Data const * pData Data * const pData ...
- RDA TDT & TOT
首先看下面的TS PSI分析图: 注意:TOT UTC与TDT是一致的 TDT下的时间为: UTC+手动TIMEZONE TOT下的时间为: UTC+解析的time_offset time_offes ...
- bzoj3302
树形dp 很明显我们可以枚举一条边,然后求两边的重心,这样是暴力,我们用一些奇怪的方法来优化这个找重心的过程,我们先预处理出来每个点最大和第二的儿子,然后每次把断掉的子树的贡献减掉,每次找重心就是向最 ...
- vs code 代码格式化
1.打开vs code > 文件 > 首选项 > 设置 > 将下面一段粘贴在右侧即可 // Place your settings in this file to overwr ...