• uva 11181


    条件概率公式: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:
    ",kase);
            for(int i=1;i<=n;i++)
            {
                printf("%lf
    ",p[i]/tot);
            }
        }
        return 0;
    }
    

    又比别人慢了点,它采取了有点过分...


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    2019年8月16日_实验室学术论文研讨
    2019年8月2日实验室学术研讨会议
    2019年7月26日实验室学术研讨会议
    2019年7月12日实验室开展学术研讨
    hdu 5547
    hdu 1286
    hdu 1272
    hdu 1213
    poj 2533 LIS(最长上升序列)
    HUD 5773 LIS(最长上升序列)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4633521.html
Copyright © 2020-2023  润新知