hdu 4586 (概率+期望)

http://acm.hdu.edu.cn/showproblem.php?pid=4586

大致题意:有一个骰子有n个面,掷到每一个面的概率是相等的,每一个面上都有相应的钱数。其中当你掷到m个面之一时,你有多掷一次的机会。问最后所得钱数的期望。

思路:设投掷第一次的期望是p,那么第二次的期望是m/n*p,第三次的期望是 (m/n)^2*p......第N次的期望是(m/n)^(N-1)*p。

那么这些期望之和便是答案。之前也是想到这,但不知道如何处理无限的情况。当时脑卡了,这不是赤裸裸的等比数列吗?

设q = m/n,公比就是q,本题中等比数列之和为p*(1-q^N)/(1-q)。分三种情况讨论:当p为0时,输出0.00;当q等于1时,说明可以无限的投掷下去,输出inf;当q < 1时,N无穷大时,1-q^N区域1,那么原式变为p/(1-q)。

#include <stdio.h>
#include <iostream>
#include <map>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL long long
#define _LL __int64
#define eps 1e-8
#define PI acos(-1.0)
using namespace std;

int n,m;
int vis[210];
int a[210];
int sum,cnt;
double p,q;

int main()
{
	while(~scanf("%d",&n))
	{
		sum = 0;
		cnt = 0;
		memset(vis,0,sizeof(vis));
		for(int i = 1; i <= n; i++)
		{
			cin >> a[i];
			sum += a[i];
		}
		p = (sum*1.0)/n;

		scanf("%d",&m);
		int x;
		for(int i = 1; i <= m; i++)
		{
			cin >> x;
			if(vis[x]) continue;
			cnt++;
			vis[x] = 1;
		}
		q = (cnt*1.0)/n;

		if(fabs(p) < eps)
			cout << "0.00" << endl;
		else if(fabs(q-1) < eps)
			cout << "inf" << endl;
		else
			printf("%.2lf\n",p/(1-q));
	}
	return 0;

}

hdu 4586 (概率+期望),布布扣,bubuko.com

时间: 2024-10-20 23:48:37

hdu 4586 (概率+期望)的相关文章

HDU 4405 概率期望DP

有 0到 n 个格子.掷骰子走路,求出到终点的数学期望,有飞行的路线. dp[i] 存储在i位置走到终点的期望. 转移方程dp[i]=(dp[i+1] ----> dp[i+6])/6+1; 有飞行路线则直接赋值 #include "stdio.h" #include "string.h" double dp[100010]; int hash[100010]; int main() { int n,m,x,y,i,j; while (scanf("

hdu 3853 概率DP 简单

http://acm.hdu.edu.cn/showproblem.php?pid=3853 题意:有R*C个格子,一个家伙要从(0,0)走到(R-1,C-1) 每次只有三次方向,分别是不动,向下,向右,告诉你这三个方向的概率,以及每走一步需要耗费两个能量,问你走到终点所需要耗费能量的数学期望: 回头再推次,思想跟以前的做过的类似 注意点:分母为0的处理 #include <cstdio> #include <cstring> #include <algorithm>

HDU 3853 概率dp

LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Submission(s): 2337    Accepted Submission(s): 951 Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl).Homura wants to help he

hdu 4870(概率Dp)

首先我们以50分为一单位,于是赢一次得1分输一次扣2分,由于每次都用小号打,所以容易观察出最后达到20分时应该分别为20分和19分.我们设dp[i]为i到i+1分的期望步数.则dp[i]=p*1+(1-p)*(dp[i-2]+dp[i-1]+dp[i]+1),前者是赢的期望,后者由于输了2分,所以变成i+1分时需要从i-2->i-1->i->i+1,就是dp[i-2]+dp[i-1]+dp[i]+1了,f[i][j]表示大号为i分小号为j分的步数期望,Dp即可 代码https://git

hdu 4405 概率dp 2012年金华亚洲网络赛--虽然水,但是是自己独立做的第一道概率dp

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4405 e[i]:当前在位置i还需要走的步数期望 受刘汝佳的AC自动机那个后缀链接写法的启发,我的x[i]通过逆序算出来连续有"flight line "的时候,能到达的最远距离, rep(i,0,m) { scanf("%d%d",&xx,&yy); x[xx]=yy; } for(int i=n;i>=0;i--) if(x[i]!=-1 &

浅谈概率期望动态规划

前言:自从去年noip有了换教室这道概率DP, 这以后各种OJ上的期望概率DP也越来越多,这里简单做个介绍 -------------------------------------------------------------------------------------------------- 文章中涉及例题:hdu 4089,hdu 4405,hdu 4576,poj 2096,poj 3744 [ 1 ] hdu 4405 机器人 要点:基础的概率DP+逆推 题意: 多组输入n,m

OI队内测试一【数论概率期望】

版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 测试分数:110 本应分数:160 改完分数:200 T1: 题解:推出了一个初始式子但是n的4分之3次方 忘了合并[实际上是没发现]本来应有60分的,但是忘记开long long 只有30分 因为一些公式不好写出来就直接截图题解吧! T2: 题解:很简单的概率期望,算出每个点被选的概率,然后在上树状数组或者线段树求逆序队,但是我只有80分,为什么解法不行?NO NO 你还是太年轻我只是线段树数据范围开小了!![

uvalive 7331 Hovering Hornet 半平面交+概率期望

题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 #include<cstdlib> 6 #include<string> 7 #include<cmath> 8 #include<vector&

【BZOJ-1419】Red is good 概率期望DP

1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Discuss] Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. Input 一行输入两个数R,B,其值在0到5000之间 Output 在最优策略下平均能得到多少钱