• UVa 11181 条件概率


    https://vjudge.net/problem/UVA-11181

    题意:

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

    思路:

    "r个人买了东西"这个事件叫E,"第i个人买东西"这个事件为Ei,则要求的是条件概率

    P(E)的话我们可以用全概率公式计算出来,把每一种情况都枚举出来,比如1100出现的概率就是,之后再计算一个P(Ei | E)即可。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 using namespace std;
     6 
     7 const int maxn=20+5;
     8 
     9 int n,r;
    10 double p[maxn];
    11 double ans[maxn];
    12 int vis[maxn];
    13 
    14 void dfs(int k,int cur)
    15 {
    16     if(cur==r)
    17     {
    18         double temp=1;
    19         for(int i=1;i<=n;i++)
    20         {
    21             if(vis[i])  temp*=p[i];
    22             else temp*=(1-p[i]);
    23         }
    24         ans[0]+=temp;
    25         for(int i=1;i<=n;i++)
    26             if(vis[i])
    27             ans[i]+=temp;
    28     }
    29     else
    30     {
    31         for(int i=k;i<=n;i++)
    32         {
    33             vis[i]=1;
    34             dfs(i+1,cur+1);
    35             vis[i]=0;
    36         }
    37     }
    38 }
    39 
    40 int main()
    41 {
    42     //freopen("D:\input.txt","r",stdin);
    43     int kase=0;
    44     while(~scanf("%d%d",&n,&r))
    45     {
    46         if(n==0 && r==0)  break;
    47         memset(ans,0,sizeof(ans));
    48         memset(vis,0,sizeof(vis));
    49         for(int i=1;i<=n;i++)
    50             scanf("%lf",&p[i]);
    51         dfs(1,0);
    52         printf("Case %d:
    ",++kase);
    53         for(int i=1;i<=n;i++)
    54             printf("%.6lf
    ",ans[i]/ans[0]);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    HDU4731+找规律
    Unable to open c
    珠宝
    allegro添加多个过孔
    STM32硬件复位时间
    Android 系统的四层结构
    AIDL与stub
    devfs,proc,udev
    cdev[典]
    Linux设备管理之权限倾斜——mem、proc、devfs、sysfs、udev(下)
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6682882.html
Copyright © 2020-2023  润新知