zoukankan      html  css  js  c++  java
  • UVA 11181 Probability|Given

      条件概率,r个人买东西的条件下第i个人买东西的概率P(Ai|B)而P(Ai|B)=P(AiB)/P(B),其中P(AiB)表示事件Ai与事件B同时发生的概率,p(B)为B事件发生的概率

      第一个样例

      3 2

       0.10

       0.20

       0.30

      p(B)为两个人买东西的概率,p(AiB)为此时第i个人买东西的概率。两个人买东西,可以是1,2买,p为0.1*0.2*(1-0.3)=0.014;1,3买为0.024;2,3买为0.054,

    则p(B)=0.014+0.024+0.054,p(A1B)=0.014+0.024,p(A2B)=0.014+0.054,p(A3B)=0.024+0.054,然后各个除以p(B)即可

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 int n,r,cas=1,buy[25];
     8 double p[25],sum[25],tot;
     9 
    10 void Cmn(int x,int num)
    11 {
    12     if(num>=r)
    13     {
    14         double pi=1;
    15         for(int i=0;i<n;i++)
    16             if(buy[i]) pi*=p[i];
    17             else pi*=1-p[i];
    18         tot+=pi;
    19         for(int i=0;i<n;i++)
    20             if(buy[i]) sum[i]+=pi;
    21         return;
    22     }
    23     if(x>=n) return;
    24     for(int i=x;i<=n-r+num;i++)
    25     {
    26         buy[i]=1;
    27         Cmn(i+1,num+1);
    28         buy[i]=0;
    29     }
    30 }
    31 
    32 /*
    33 void Cmn(int x,int num)
    34 {
    35     if(num>=r)
    36     {
    37         double pi=1;
    38         for(int i=0;i<n;i++)
    39             if(buy[i]) pi*=p[i];
    40             else pi*=1-p[i];
    41         tot+=pi;
    42         for(int i=0;i<n;i++)
    43             if(buy[i]) sum[i]+=pi;
    44         return;
    45     }
    46     if(x>n-r+num) return;
    47     buy[x]=1;
    48     Cmn(x+1,num+1);
    49     buy[x]=0;
    50     Cmn(x+1,num);
    51 }
    52 */
    53 int main()
    54 {
    55     while(scanf("%d%d",&n,&r)==2&&(n||r))
    56     {
    57         printf("Case %d:
    ",cas++);
    58         for(int i=0;i<n;i++)
    59             scanf("%lf",&p[i]);
    60         memset(sum,0,sizeof(sum));
    61         memset(buy,0,sizeof(buy));
    62         tot=0;
    63         Cmn(0,0);
    64         for(int i=0;i<n;i++)
    65             printf("%.6lf
    ",sum[i]/tot);
    66     }
    67     return 0;
    68 }
    View Code
  • 相关阅读:
    PAT 1037. 在霍格沃茨找零钱(20)
    PAT 1036. 跟奥巴马一起编程(15)
    Topcoder SRM633 DIV2 解题报告
    HDU 4565 So Easy! 矩阵快速幂 + 共轭数
    HDU 2256 Problem of Precision 矩阵快速幂 + 共轭数
    FZU 1683 纪念SlingShot 矩阵快速幂
    CodeForces 185A Plant 矩阵快速幂
    HDU 2604 Queuing 矩阵快速幂
    HDU 1575 Tr A 矩阵快速幂
    HDU 1757 A Simple Math Problem 矩阵快速幂
  • 原文地址:https://www.cnblogs.com/cdyboke/p/4870120.html
Copyright © 2011-2022 走看看