uva 11181

来源:互联网 发布:office2016vol版mac 编辑:程序博客网 时间:2024/06/14 18:29

思路:条件概率公式+枚举

主要公式: p(a|b)=P(ab)/p(b)


#include <iostream>#include <cstring>#include <stdio.h>#include <cmath>#include <vector>using namespace std;vector <int> q;double dp[200],p[200],ans;int main(){    //freopen("in.txt","r",stdin);    int n,r;    int num=1;    while(scanf("%d%d",&n,&r)!=EOF)    {        if(n==0&r==0)            break;        ans=0;        for(int i=0;i<n;i++)            scanf("%lf",&p[i]),dp[i]=0;        for(int i=0;i<(1<<n);i++)        {            int tmp=i,j=0;            q.clear();            for(int k=0;k<n;k++)            {                if(!tmp)                    break;                if(tmp&1)                    j++,q.push_back(k);                tmp>>=1;            }            if(j==r)            {                double sum=1;                tmp=i;                for(int k=0;k<n;k++)                {                    if(tmp&1) sum*=p[k];                    else                        sum*=(1.0-p[k]);                    tmp>>=1;                }                ans+=sum;                for(int k=0;k<q.size();k++)                    dp[q[k]]+=sum;            }        }        printf("Case %d:\n",num++);        for(int i=0;i<n;i++)            printf("%lf\n",dp[i]/ans);    }}



0 0
原创粉丝点击