标签:数学
条件概率公式:P( A|B ) = P( AB ) / P( B )
表示在事件B发生的前提下,事件A发生的概率;
对本道题:
设事件E:r个人买了东西;
事件Ei:第i个人买了东西;
则要求的是P( Ei | E );
计算P( E ) 用全概率公式即可,采用递归枚举出所有r个人买东西的情况,然后计算出其总的概率;
计算P( Ei ) 就是在上面递归枚举的过程中将选上第i个人的情况的概率加起来;(在这种情况下,其概率就是:在E发生的前提下的概率)
代码:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn = 21; int n,r; double a[maxn],p[maxn],tot; int vis[maxn]; void dfs(int cur,int cnt) { if(cur==n+1) { if(cnt==r) { double sum=1; for(int i=1;i<=n;i++) { if(vis[i]) sum*=a[i]; else sum*=(1-a[i]); } for(int i=1;i<=n;i++) { if(vis[i]) p[i]+=sum; } tot+=sum; } return; } vis[cur]=1; dfs(cur+1,cnt+1); vis[cur]=0; dfs(cur+1,cnt); } int main() { int kase = 0; while(scanf("%d%d",&n,&r)!=EOF) { kase++; if(n==0&&r==0) break; for(int i=1;i<=n;i++) scanf("%lf",&a[i]); tot=0; memset(vis,0,sizeof(vis)); memset(p,0,sizeof(p)); dfs(1,0); printf("Case %d:\n",kase); for(int i=1;i<=n;i++) { printf("%lf\n",p[i]/tot); } } return 0; }
uva 11181 - Probability|Given,布布扣,bubuko.com
标签:数学
原文地址:http://blog.csdn.net/u013382399/article/details/38519475