• 【UVA 11181】(条件概率)


    题链:https://cn.vjudge.net/problem/UVA-11181

    题意


    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
    ", 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());
    		}
    	}
    }
    
  • 相关阅读:
    设计模式《JAVA与模式》之解释器模式
    设计模式《JAVA与模式》之状态模式
    设计模式《JAVA与模式》之备忘录模式
    设计模式《JAVA与模式》之责任链模式
    设计模式《JAVA与模式》之命令模式
    设计模式《JAVA与模式》之迭代子模式
    iOS-联系人应用(一)
    简易 HTTP Server 实现(JAVA)
    IBM Websphere 集群会话共享问题解决办法
    集群会话共享问题的几种处理方式
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/7350018.html
Copyright © 2020-2023  润新知