uva11181Probability|Given

Posted invoid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva11181Probability|Given相关的知识,希望对你有一定的参考价值。

枚举,条件概率。

2^20次方等于100w,是大约可以没准还能过的。

二进制枚举时,如果买东西的人恰好为r个,设概率为p,就将sum[i]+=p(sum[i]为r个人买东西时第i个人买东西的概率),tot+=p(tot为r个人买东西的概率)

要求的就是sum[i]/tot。

P(第i个人实际买东西)=P(r个人买东西且第i个人在其中)/P(r个人买东西)。

r为0时特判

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 20 + 10;
int n,r,N,cnt,kase;
double a[maxn],sum[maxn];
double tot,p;

int main() {
    kase=0;
    while(scanf("%d%d",&n,&r)==2) {
        printf("Case %d:\n",++kase);
        if(!n&&!r) break;
        for(int i=0;i<n;i++) scanf("%lf",&a[i]);    
        if(!r) {
            for(int i=0;i<n;i++) printf("0.000000\n");    
            continue;
        }
        N=1<<n;
        memset(sum,0,sizeof(sum)); tot=0;
        for(int i=1;i<N;i++) {
            cnt=0; p=1;
            for(int j=0;j<n;j++) {
                if(i&(1<<j)) {cnt++; p*=a[j];}
                else p*=(1-a[j]);
            }
            if(cnt==r) {
                for(int j=0;j<n;j++) if(i&(1<<j)) sum[j]+=p;
                tot+=p;
            }
        }
        for(int i=0;i<n;i++) printf("%.6lf\n",sum[i]/tot);
    }    
    return 0;    
}

以上是关于uva11181Probability|Given的主要内容,如果未能解决你的问题,请参考以下文章

UVA11181Probability|Given(条件概率)

uva 11181 Probability|Given

UVA 11181 Probability|Given 数学 条件概率

UVA 11181 Probability|Given

「UVA11181」 Probability|Given(概率

UVA - 11181 Probability|Given (条件概率)