11427 - Expect the Expected

Some mathematical background. This problem asks you to compute the expected value of a random
variable. If you haven’t seen those before, the simple definitions are as follows. A random variable is a
variable that can have one of several values, each with a certain probability. The probabilities of each
possible value are positive and add up to one. The expected value of a random variable is simply the
sum of all its possible values, each multiplied by the corresponding probability. (There are some more
complicated, more general definitions, but you won’t need them now.) For example, the value of a fair,
6-sided die is a random variable that has 6 possible values (from 1 to 6), each with a probability of 1/6.
Its expected value is 1/6 + 2/6 + . . . + 6/6 = 3.5. Now the problem.
I like to play solitaire. Each time I play a game, I have probability p of solving it and probability
(1 − p) of failing. The game keeps statistics of all my games – what percentage of games I have won.
If I simply keep playing for a long time, this percentage will always hover somewhere around p ∗ 100%.
But I want more.
Here is my plan. Every day, I will play a game of solitaire. If I win, I’ll go to sleep happy until
the next day. If I lose, I’ll keep playing until the fraction of games I have won today becomes larger
than p. At this point, I’ll declare victory and go to sleep. As you can see, at the end of each day, I’m
guaranteed to always keep my statistics above the expected p ∗ 100%. I will have beaten mathematics!
If your intuition is telling you that something here must break, then you are right. I can’t keep
doing this forever because there is a limit on the number of games I can play in one day. Let’s say that
I can play at most n games in one day. How many days can I expect to be able to continue with my
clever plan before it fails? Note that the answer is always at least 1 because it takes me a whole day
of playing to reach a failure.
Input
The first line of input gives the number of cases, N. N test cases follow. Each one is a line containing
p (as a fraction) and n.
1 ≤ N ≤ 3000, 0 ≤ p < 1,
The denominator of p will be at most 1000,
1 ≤ n ≤ 100.
Output
For each test case, print a line of the form ‘Case #x: y’, where y is the expected number of days,
rounded down to the nearest integer. The answer will always be at most 1000 and will never be within
0.001 of a round-off error case.
Sample Input
4
1/2 1
1/2 2
0/1 10
1/2 3
Sample Output
Case #1: 2
Case #2: 2
Case #3: 1
Case #4: 2

题解:题意是一个人玩牌,每次胜率是p,她每天晚上最多玩n局,如果胜的频率大于p就睡,明天继续,如果玩了n局还没大于p

就戒了,以后就不玩了;平均情况下,他可以玩几天;求期望,先求出每天哭着睡觉的概率,然后期望就是:s+=i*Q*pow(1-Q,i-1);

s=Q+2Q(1-Q)+3Q*(1-Q)^2........;大神们通过一定的推算可以得到s=1/Q;

还可以假设期望是e天,情况分两类,第一天哭着睡觉:概率Q,期望1;第一天开心睡觉:期望1-Q,期望1+e;e=Q*1+(1-Q)*(1+e);

e=1/Q;

不过我还是不太理解,概率论没学好T_T;

两种代码:

代码1:直接套了1/Q

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int INF=0x3f3f3f3f;
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
const int MAXN=110;
double dp[MAXN][MAXN];
int main(){//dp[i][j]=dp[i-1][j-1]*p+dp[i-1][j]*(1-p)
int T,px,py,n,kase=0;
scanf("%d",&T);
while(T--){
scanf("%d/%d %d",&px,&py,&n);
//printf("%d/%d %d\n",px,py,n);
double p=1.0*px/py,Q=0;
mem(dp,0);dp[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j*py<=px*i;j++){
dp[i][j]=dp[i-1][j]*(1-p);
if(j)dp[i][j]+=dp[i-1][j-1]*p;
if(i==n)Q+=dp[i][j];
}
}
printf("Case #%d: %d\n",++kase,(int)(1/Q));
}
return 0;
}

  代码2:暴力趋近o~o;到10w就抄了,1w就ac了,1e-15;

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int INF=0x3f3f3f3f;
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
const int MAXN=110;
double dp[MAXN][MAXN];
int main(){//dp[i][j]=dp[i-1][j-1]*p+dp[i-1][j]*(1-p)
int T,px,py,n,kase=0;
scanf("%d",&T);
while(T--){
scanf("%d/%d %d",&px,&py,&n);
//printf("%d/%d %d\n",px,py,n);
double p=1.0*px/py,Q=0;
mem(dp,0);dp[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j*py<=px*i;j++){
dp[i][j]=dp[i-1][j]*(1-p);
if(j)dp[i][j]+=dp[i-1][j-1]*p;
if(i==n)Q+=dp[i][j];
}
}
double s=1e-15;
// printf("%lf\n",s);
for(int i=1;i<=10000;i++)s+=i*Q*pow(1-Q,i-1);
printf("Case #%d: %d\n",++kase,(int)s);
}
return 0;
}

  

11427 - Expect the Expected(概率期望)的更多相关文章

  1. UVA 11427 - Expect the Expected(概率递归预期)

    UVA 11427 - Expect the Expected 题目链接 题意:玩一个游戏.赢的概率p,一个晚上能玩n盘,假设n盘都没赢到总赢的盘数比例大于等于p.以后都不再玩了,假设有到p就结束 思 ...

  2. uva 11427 - Expect the Expected(概率)

    题目链接:uva 11427 - Expect the Expected 题目大意:你每天晚上都会玩纸牌,每天固定最多玩n盘,每盘胜利的概率为p,你是一个固执的人,每天一定要保证胜局的比例大于p才会结 ...

  3. UVa 11427 Expect the Expected (数学期望 + 概率DP)

    题意:某个人每天晚上都玩游戏,如果第一次就䊨了就高兴的去睡觉了,否则就继续直到赢的局数的比例严格大于 p,并且他每局获胜的概率也是 p,但是你最玩 n 局,但是如果比例一直超不过 p 的话,你将不高兴 ...

  4. UVA - 11427 Expect the Expected (概率dp)

    Some mathematical background. This problem asks you to compute the expected value of a random variab ...

  5. UVA 11427 Expect the Expected (期望)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=26&pa ...

  6. UVA.11427.Expect the Expected(期望)

    题目链接 \(Description\) https://blog.csdn.net/Yukizzz/article/details/52084528 \(Solution\) 首先每一天之间是独立的 ...

  7. UVA 11427 Expect the Expected(DP+概率)

    链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35396 [思路] DP+概率 见白书. [代码] #include&l ...

  8. UVa 11427 - Expect the Expected

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  9. UVA11427 Expect the Expected 概率dp+全概率公式

    题目传送门 题意:小明每晚都玩游戏,每一盘赢的概率都是p,如果第一盘就赢了,那么就去睡觉,第二天继续玩:否则继续玩,玩到赢的比例大于p才去睡:如果一直玩了n盘还没完成,就再也不玩了:问他玩游戏天数的期 ...

随机推荐

  1. Clementine 12.0 的使用(因为比较少用,项目中用到才开始接触写一下自己的使用方法)

    首先我是根据excel的文件做的训练,就以excel来做介绍 1.打开Clementine 12.0 软件 点击软件下方的 ”源“ 即你要做训练的数据源.因为是excel文件双击excel. 2.双击 ...

  2. 用JQUERY实现给当前页面导航一个CSS

    今天遇到一个问题 当我在导航中点击一个标签后 希望用户知道自己所在导航的位置 只需要根据点击的页面是否加载完成 给这个标签用JS 添加一个CCcurr的 也就是我们常说的current CLASS 代 ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  4. Foundation 框架 NSArray、NSMutableArray排序

    一.使用selector对数组进行排序(无返回) 数组 book 中包含 AddressCard对象. 1.对数组调用 sortUsingSelector方法 -(void) sortByName { ...

  5. VS2015 启用“仅我的代码”

    在调试网站的时候,如果不勾选 [启用"仅我的代码"],会跳出一大堆异常,但是异常不作处理,非常烦人: 解决办法就是在 [调试]->[选项]->[勾选 启用"仅 ...

  6. ubuntu 16.04环境配置

    ubuntu 16:1.源cp /etc/apt/sources.list /etc/apt/sources.list.bkpvi /etc/apt/sources.list-+{    deb ht ...

  7. Python学习笔记 (3) :列表、元组的操作

    列表,即写在方括号之间.用逗号分隔开的数值列表.列表内的项目不必全是相同的类型. >>> a = ['spam', 'eggs', 100, 1234] >>> a ...

  8. Angulajs 表单的ng-model绑定

    1.对于文本框,只需设置 ng-model 属性就可以实现双向绑定,如: <input type="text" class="form-control" ...

  9. 小编辑 Java 中十进制和十六进制的相互转换

    1 2 3 4 5 // 十进制转化为十六进制,结果为C8. Integer.toHexString(200);   // 十六进制转化为十进制,结果140. Integer.parseInt(&qu ...

  10. go语法之一

    Go语法: Go语言要求public的变量必须以 大写字母开头,private变量则以小写字母开头,这种做法不仅免除了public.private关键字,更重要的是统一了命名风格. Go语言对{  } ...