zoukankan      html  css  js  c++  java
  • UVa11181 条件概率

    原题链接:UVa11181

    解析:求每个人实际买了东西的概率,就是求第i个人买了东西的情况下有r个人买了东西。设有r个人买东西为事件E,第i个人买东西为事件Ei。那么要求的就是p( Ei  E ) = p( E * Ei) / p( E )

    代码实例:

    #include<cstdio>
    #include<cstring>
    const int maxn = 20 + 5;
    int n, r, buy[maxn];
    double P[maxn], sum[maxn];
    
    // depth, current number of 1, and product of probs
    void dfs(int d, int c, double prob) {
      if(c > r || d - c > n - r) return; // too many 1/0
      if(d == n) {
        sum[n] += prob;
        for(int i = 0; i < n; i++) if(buy[i])
          sum[i] += prob;
        return;
      }
      buy[d] = 0;
      dfs(d+1, c, prob*(1-P[d]));
      buy[d] = 1;
      dfs(d+1, c+1, prob*P[d]);
    }
    
    int main() {
      int kase = 0;
      while(scanf("%d%d", &n, &r) == 2 && n) {
        for(int i = 0; i < n; i++) scanf("%lf", &P[i]);
        memset(sum, 0, sizeof(sum));
        dfs(0, 0, 1.0);
        printf("Case %d:
    ", ++kase);
        for(int i = 0; i < n; i++)
          printf("%.6lf
    ", sum[i] / sum[n]);
      }
      return 0;
    }

    其中sum[i]为第i个人买东西且有r个人买东西的概率,即p( Ei E)。sum[n]为有r个人买东西的概率,即p( E )。

  • 相关阅读:
    C加加学习之路 1——开始
    哈夫曼树C++实现详解
    Linux常用命令
    Accp第二章:基础知识
    第一章Accp 8.0
    泛型集合
    深入C#数据类型
    初始wondows系统
    深入.NET框架
    二至十五章总结
  • 原文地址:https://www.cnblogs.com/long98/p/10352212.html
Copyright © 2011-2022 走看看