思路:条件概率公式+枚举
主要公式: 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);
}
}