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 数学 条件概率