条件概率公式:P( A|B ) = P( AB ) / P( B )
表示在事件B发生的前提,事件A发生的可能性;
问题的:
复位事件E:r个人买东西;
事件Ei:文章i个人买东西;
的要求是P( Ei | E );
计算P( E ) 用全概率公式就可以。採用递归枚举出全部r个人买东西的情况,然后计算出其总的概率;
计算P( Ei ) 就是在上面递归枚举的过程中将选上第i个人的情况的概率加起来;(在这样的情况下,其概率就是:在E发生的前提下的概率)
代码:
#include又比别人慢了点,它采取了有点过分...#include #include #include 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;}
版权声明:本文博客原创文章,博客,未经同意,不得转载。