码迷,mamicode.com
首页 > 其他好文 > 详细

UVA - 11427 Expect the Expected (DP+概率)

时间:2014-08-29 16:03:58      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   os   io   strong   ar   for   

Description

bubuko.com,布布扣

Problem A
Expect the Expected
Input:
Standard Input

Output: Standard Output

 

Some mathematicalbackground. This problem asks you to compute the expected value of arandom variable. If you haven‘t seen those before, the simple definitions areas follows. A random variable is a variable that can have one of severalvalues, each with a certain probability. The probabilities of each possiblevalue are positive and add up to one. The expected value of a randomvariable is simply the sum of all its possible values, each multiplied by thecorresponding probability. (There are some more complicated, more generaldefinitions, 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), eachwith 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. Eachtime 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 ofgames I have won. If I simply keep playing for a long time, this percentagewill always hover somewhere around p*100%. But I want more.

Here is my plan. Every day, Iwill 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 todaybecomes larger than p. At this point, I‘ll declare victory and go tosleep. As you can see, at the end of each day, I‘m guaranteed to always keep mystatistics above the expected p*100%. I will have beatenmathematics!

If your intuition is telling youthat something here must break, then you are right. I can‘t keep doing thisforever 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 canI 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 ofplaying to reach a failure.

Input

The first line of input gives thenumber of cases, N. N test cases follow. Each one is a linecontaining 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 lineof the form "Case #x: y", where y is theexpected number of days, rounded down to the nearest integer. The answer willalways be at most 1000 and will never be within 0.001 of a round-off errorcase.

Sample Input                               Output for Sample Input

4
1/2 1
1/2 2
0/1 10
1/2 3
Case #1: 2
Case #2: 2
Case #3: 1
Case #4: 2

Problemsetter: Igor Naverniouk

Special thanks: Frank Chu

题意:每天晚上你都玩牌,如果赢一次了就去睡觉,如果输了继续玩,每盘赢的概率是p,你会一直玩到获胜局数大于p才会停,每晚只有n盘,问你计算出平均情况下,你会玩多少晚上

思路:首先设Q为只玩一晚就再也不玩了的概率,设d[i][j]表示前i局中获胜比例不超过p,且前i局胜了j局的概率,那么就有全概率公式,

当:j/i<=p的时d[i][j] = d[i-1][j] * (1-p) + d[i-1][j-1] * p,d[0][0] = 1, d[0][1] = 0,那么d[n][0]+d[n][1]+...就是所求的概率Q,

然后就是计算总天数X的数学期望,讨论当X=1,X=2....根据EX=Q + 2*Q(1-Q)+3*Q*(1-Q)^2...推出EX=1/Q

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 105;

int main() {
	int t, cas = 1;
	scanf("%d", &t);
	while (t--) {
		int n, a, b;
		double d[maxn][maxn], p;
		scanf("%d/%d%d", &a, &b, &n);
		p = (double) a / b;
		memset(d, 0, sizeof(d));
		d[0][0] = 1.0, d[0][1] = 0.0;
		for (int i = 1; i <= n; i++)
			for (int j = 0; j * b <= a * i; j++) {
				d[i][j] = d[i-1][j] * (1-p);
				if (j)
					d[i][j] += d[i-1][j-1] * p;
			}
		double Q = 0.0;
		for (int j = 0; j*b <= a*n; j++)
			Q += d[n][j];
		printf("Case #%d: %d\n", cas++, (int)(1/Q));
	}
	return 0;
}


UVA - 11427 Expect the Expected (DP+概率)

标签:des   style   blog   http   os   io   strong   ar   for   

原文地址:http://blog.csdn.net/u011345136/article/details/38926333

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!