链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2122

题意:

有n个人准备去超市逛,其中第i个人买东西的概率是Pi。逛完以后你得知有r个人买了东西。
根据这一信息,请计算每个人实际买了东西的概率。
输入n(1≤n≤20)和r(0≤r≤n),输出每个人实际买了东西的概率。

分析:

设“r个人买了东西”这个事件为E,“第i个人买东西”这个事件为Ei,则要求的是条件概率P(Ei|E)。
根据条件概率公式,P(Ei|E) = P(EiE) / P(E)。
P(E)依然可以用全概率公式。例如,n=4,r=2,有6种可能:1100, 1010, 1001, 0110, 0101, 0011,
其中1100的概率为P1*P2*(1-P3)*(1-P4),其他类似,设opt[k]表示第k个人是否买东西(1表示买,0表示不买),
则可以用递归的方法枚举恰好有r个opt[k]=1的情况。
如何计算P(EiE)呢?方法一样,只是枚举的时候要保证第opt[i]=1。
用tot表示E的概率,sum[i]表示opt[i]=1的概率之和,则答案为P(EiE)/P(E)=sum[i]/tot。

代码:

 import java.io.*;
import java.util.*; public class Main {
static final int UP = 20 + 5;
static int n, r;
static double P[] = new double[UP], sum[] = new double[UP];
static boolean opt[] = new boolean[UP]; static void dfs(int d, int s, double prob) { // d为第几个,s为选了几个,prob为当前概率
if(s > r || d - s > n - r) return; // 选的个数超过了限制或者不选的个数超过了限制
if(d == n) {
sum[n] += prob;
for(int i = 0; i < n; i++) if(opt[i]) sum[i] += prob;
return;
}
opt[d] = true;
dfs(d+1, s+1, prob * P[d]);
opt[d] = false;
dfs(d+1, s, prob * (1-P[d]));
} public static void main(String args[]) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
for(int cases = 1; ; cases++) {
n = cin.nextInt();
r = cin.nextInt();
if(n == 0) break;
for(int i = 0; i < n; i++) P[i] = cin.nextDouble(); Arrays.fill(sum, 0);
Arrays.fill(opt, false);
dfs(0, 0, 1); System.out.printf("Case %d:\n", cases);
for(int i = 0; i < n; i++)
System.out.printf("%.6f\n", sum[i] / sum[n]);
}
cin.close();
}
}

UVa 11181 - Probability|Given(条件概率)的更多相关文章

  1. Uva - 11181 Probability|Given (条件概率)

    设事件B为一共有r个人买了东西,设事件Ai为第i个人买了东西. 那么这个题目实际上就是求P(Ai|B),而P(Ai|B)=P(AiB)/P(B),其中P(AiB)表示事件Ai与事件B同时发生的概率,同 ...

  2. 概率论 --- Uva 11181 Probability|Given

    Uva 11181 Probability|Given Problem's Link:   http://acm.hust.edu.cn/vjudge/problem/viewProblem.acti ...

  3. uva 11181 - Probability|Given(概率)

    题目链接:uva 11181 - Probability|Given 题目大意:有n个人去超市买东西,给出r,每个人买东西的概率是p[i],当有r个人买东西的时候,第i个人恰好买东西的概率. 解题思路 ...

  4. UVA - 11181 Probability|Given (条件概率)

    题意:有n个人,已知每个人买东西的概率,求在已知r个人买了东西的条件下每个人买东西的概率. 分析:二进制枚举个数为r的子集,按定义求即可. #include<cstdio> #includ ...

  5. uva 11181 - Probability|Given

    条件概率公式:P( A|B ) = P( AB ) / P( B ) 表示在事件B发生的前提,事件A发生的可能性: 问题的: 复位事件E:r个人买东西: 事件Ei:文章i个人买东西: 的要求是P( E ...

  6. UVA 11181 Probability|Given (离散概率)

    题意:有n个人去商场,其中每个人都有一个打算买东西的概率P[i].问你最后r个人买了东西的情况下每个人买东西的概率 题解:一脸蒙蔽的题,之前的概率与之后的概率不一样??? 看了白书上的题解才知道了,其 ...

  7. 【UVA 11181】(条件概率)

    题链:https://cn.vjudge.net/problem/UVA-11181 题意 n个人去了超市,已知每个人买东西的概率为p[i],在已知有r个人买了东西的情况下,求实际上每个人买东西的概率 ...

  8. UVA - 11181 数学

    UVA - 11181 题意: n个人去买东西,其中第i个人买东西的概率是p[i],最后只有r个人买了东西,求每个人实际买了东西的概率 代码: //在r个人买东西的概率下每个人买了东西的概率,这是条件 ...

  9. uva 11346 - Probability(概率)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=2321">题目链接:uva 11346 - ...

随机推荐

  1. 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)

    分析过程 这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的. 一般朋友,都会看到如下通用获取IP地址方法. function getIP() { if (isset($_ ...

  2. shell程序设计小知识

    一.用户登陆进入系统后的系统环境变量:$HOME 使用者自己的目录$PATH 执行命令时所搜寻的目录$TZ 时区$MAILCHECK 每隔多少秒检查是否有新的信件$PS1 在命令列时的提示号$PS2 ...

  3. jQuery 整体架构

    不同于 jQuery 代码各个模块细节实现的晦涩难懂,jQuery 整体框架的结构十分清晰,按代码行文大致分为如上图所示的模块. 初看 jQuery 源码可能很容易一头雾水,因为 9000 行的代码感 ...

  4. 移除TFS服务器关系

    移除TFS服务器关系:1.将项目和从以前的TFS服务器断开.2.退出VS.3.找到C:\Documents and Settings\Administrator\Local Settings\Appl ...

  5. Azure 项目构建 – 部署高可用的 Python Web 应用

    Python 以其优美,清晰,简单的特性在全世界广泛流行,成为最主流的编程语言之一.Azure 平台针对 Python 提供了非常完备的支持.本项目中,您将了解如何构造和部署基于 Azure Web ...

  6. linux修改用户名和密码

    linux修改用户名和密码 修改root密码:sudo passwd root 修改用户密码(如hadoop) sudo passwd hadoop 修改主机名:sudo vi /etc/hostna ...

  7. Safari无痕模式下,storage被禁用问题

    前言 Safari开启无痕模式后,localStorage和sessionStorage为空,对其进行set操作也会报错,也就是说这种情况下,storage是被禁止使用了.接下来说一下解决方法. 解决 ...

  8. jquery 拓展函数集

    方式: 通过拓展在调用$()时返回的包装器 1.将函数绑定到$.fn $.fn.disable = function(){ return this.each(function(){ if (typeo ...

  9. 在 CentOS6 上安装 GraphicsMagick-1.3.30

    在 CentOS6 上安装 GraphicsMagick-1.3.30 1.简介: 1.1.在介绍 GraphicsMagick 前我们不得不先介绍下 ImageMagick: ImageMagick ...

  10. JavaScript中实现DI的原理

    什么是依赖注入 按照上面图的流程中我们可以知道我们需要实现这么几件事: 提供一个服务容器 为目标函数注册需要的依赖 获取目标函数注册的依赖项 通过依赖项来查询对应服务 将获取的依赖项传入目标函数 提供 ...