zoukankan      html  css  js  c++  java
  • UVA

    UVA - 11181

    题意:

    n个人去买东西,其中第i个人买东西的概率是p[i],最后只有r个人买了东西,求每个人实际买了东西的概率

    代码:

    //在r个人买东西的概率下每个人买了东西的概率,这是条件概率,因为最多20个人可以枚举所有的状态
    //然后找到所有的r个人买东西的状态,算出总的概率,某个人在此条件下的概率就是这个人参与了的状态
    //的概率和除以总概率。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int sta[1<<21],n,r,nu;
    double p[22],sum[22];
    void init(){
        int N=(1<<n);
        nu=0;
        for(int i=0;i<N;i++){
            int t=i,cnt=0;
            while(t){
                cnt+=(t&1);
                t>>=1;
            }
            if(cnt==r) sta[++nu]=i;
        }
    }
    int main()
    {
        int cas=0;
        while(scanf("%d%d",&n,&r)==2&&(n+r)){
            for(int i=1;i<=n;i++)
                scanf("%lf",&p[i]);
            init();
            memset(sum,0,sizeof(sum));
            double tot=0;
            for(int i=1;i<=nu;i++){
                int x=sta[i];
                double tmp=1.0;
                for(int j=1;j<=n;j++){
                    if(x&(1<<(j-1))) tmp*=p[j];
                    else tmp*=(1-p[j]);
                }
                tot+=tmp;
                for(int j=1;j<=n;j++)
                    if(x&(1<<(j-1))) sum[j]+=tmp;
            }
            printf("Case %d:
    ",++cas);
            for(int i=1;i<=n;i++)
                printf("%.6lf
    ",sum[i]/tot);
        }
        return 0;
    }
  • 相关阅读:
    我的Asp.Net Hello World程序

    快速排序
    Python是一门什么样的语言
    Python开发简介
    LVS(Linux Viretual Server) 负载均衡器 + 后端服务器
    易迷糊题
    python语言入门 第四天
    日常练习 1.0
    User_Login_Register_Shopping 1.0
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/7358817.html
Copyright © 2011-2022 走看看