博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【UVA 11181】(条件概率)
阅读量:6153 次
发布时间:2019-06-21

本文共 2461 字,大约阅读时间需要 8 分钟。

题链:

题意


n个人去了超市,已知每个人买东西的概率为p[i],在已知有r个人买了东西的情况下,求实际上每个人买东西的概率

题解


设r个人买东西的时间为E

\[ans=p(i\;|\;E)=\frac{p(iE)}{p(E)}\]
每个人买东西的概率是独立的,在一种r情况下,利用乘法原理即可。
多种r情况是互斥的,累加起来即可。

参考代码

import java.io.*;import java.util.*;public class Main {    static final int N=(int)5005;    static double p[]=new double[25];    static boolean vis[]=new boolean[25];    static int n,r;    static double sum[]=new double[25];    static void dfs(int step,int cnt,double res) {        if(step==n+2||cnt>r) return;        if(step==n+1&&cnt==r) {            sum[0]+=res;            for(int i=1;i<=n;i++) if(vis[i]) {                sum[i]+=res;            }            return;        }        vis[step]=false;        dfs(step+1,cnt,res*(1-p[step]));        vis[step]=true;        dfs(step+1,cnt+1,res*p[step]);    }    public static void main(String[] args) {          InputStream sys=System.in;        InputReader in=new InputReader(sys);      //  Scanner sc=new Scanner(new InputStreamReader(sys));        PrintWriter out=new PrintWriter(System.out);        int T=1;        while(true) {            n=in.nextInt();r=in.nextInt();            if(n==0&&r==0) break;            for(int i=1;i<=n;i++) {                 p[i]=in.nextDouble();                 vis[i]=false;sum[i]=0;            }            sum[0]=0;            dfs(1,0,1);            StringBuffer ans=new StringBuffer();            for(int i=1;i<=n;i++) {                  ans.append(String.format("%.6f\n", sum[i]/sum[0]));               }            out.println("Case "+(T++)+":");            out.print(ans);            out.flush();        }    }    static class InputReader {        public BufferedReader reader;        public StringTokenizer tokenizer;                public InputReader(InputStream stream) {            reader = new BufferedReader(new InputStreamReader(stream), 32768);            tokenizer = null;        }        public String next() {            while (tokenizer == null || !tokenizer.hasMoreTokens()) {                try {                    tokenizer = new StringTokenizer(reader.readLine());                } catch (IOException e) {                    throw new RuntimeException(e);                }            }            return tokenizer.nextToken();        }        public int nextInt() {            return Integer.parseInt(next());        }                public double nextDouble() {            return Double.parseDouble(next());        }    }}

转载于:https://www.cnblogs.com/zsyacm666666/p/7350018.html

你可能感兴趣的文章
Linux磁盘管理和文件系统管理
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>