zoukankan      html  css  js  c++  java
  • 【UVA11181】条件概率

    题意

    有n个人准备去超市逛,其中第i个人买东西的概率是pi。逛完以后你得知有r个人买了东西。根据这一信息,请计算每个人实际买了东西的概率。

    分析

    r个人买了东西的事件为E,第i个买东西的事件为Ei

    按照紫书上的思路来做,要求的是每个条件概率P(Ei|E)

    而我们只需要dfs所有情况,把可能的情况找出来,然后根据全概率公式计算

    代码

    #include<bits/stdc++.h>  
    using namespace std;  
    #define N 22  
    #define db double  
    int n,r,t,vis[N];  
    db p[N],ans[N];  
      
    inline void dfs(int k,int cur)  
    {  
        if(cur==r)  
        {  
            db tmp=1;  
            for(int i=1;i<=n;i++)  
                if(vis[i]) tmp*=p[i];  
                else tmp*=(1-p[i]);  
            ans[0]+=tmp;  
            for(int i=1;i<=n;i++)  
                if(vis[i])  
                    ans[i]+=tmp;  
        }     
        else  
        {  
            for(int i=k;i<=n;i++)  
            {  
                vis[i]=1;  
                dfs(i+1,cur+1);  
                vis[i]=0;  
            }  
        }  
    }  
      
    int main()  
    {  
        while(scanf("%d%d",&n,&r)&&n)  
        {  
            memset(vis,0,sizeof(vis));  
            memset(ans,0,sizeof(ans));  
            for(int i=1;i<=n;i++)scanf("%lf",&p[i]);  
            dfs(1,0);  
            printf("Case %d:
    ",++t);  
            for(int i=1;i<=n;i++)printf("%.6lf
    ",ans[i]/ans[0]);  
        }  
    }  
  • 相关阅读:
    pod 安装
    Mac百度云破解限速-修复选中没有导出下载
    swift -SnapKit一些基本使用
    xcode 显示多个重复模拟器
    xcode选择模拟器显示No Scheme
    Xcode删除指定版本的模拟器
    javaScript基础
    Dao模式多表联查
    SQLServer数据库
    数据库错题分析
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9875939.html
Copyright © 2011-2022 走看看