• UVA 11181 Probability|Given (离散概率)


    题意:有n个人去商场,其中每个人都有一个打算买东西的概率P[i]。问你最后r个人买了东西的情况下每个人买东西的概率

    题解:一脸蒙蔽的题,之前的概率与之后的概率不一样??? 看了白书上的题解才知道了,其实就是条件概率的应用

       我们假设:E为有r个人买东西的事件,Ei表示第i个人买了东西的事件,则我们需要求得就是P(Ei|E)=P(Ei E)/P(E)

       求法就是枚举每个人的两种状态---买p[i]与不买(1-p[i])。

       接着就是枚举所有状态,找r个1与其中第i个人为1的概率进行处理

    #include<set>
    #include<map>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<vector>
    #include<string>
    #include<cstdio>
    #include<cstring>
    #include<iomanip>
    #include<stdlib.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define eps 1E-8
    /*注意可能会有输出-0.000*/
    #define sgn(x) (x<-eps? -1 :x<eps? 0:1)//x为两个浮点数差的比较,注意返回整型
    #define cvs(x) (x > 0.0 ? x+eps : x-eps)//浮点数转化
    #define zero(x) (((x)>0?(x):-(x))<eps)//判断是否等于0
    #define mul(a,b) (a<<b)
    #define dir(a,b) (a>>b)
    typedef long long ll;
    typedef unsigned long long ull;
    const int Inf=1<<28;
    const ll INF=1LL<<60;
    const double Pi=acos(-1.0);
    const int Mod=1e9+7;
    const int Max=200010;
    double ans[Max],p[Max];
    double glores,glotot;
    int vis[Max],n;
    void dfs(int i,int r,int k,double ans)
    {
        if(r<0||n-i<r)
            return ;
        if(i==n)
        {
            if(vis[k])
                glores+=ans;
            glotot+=ans;
            return ;
        }
        vis[i]=1;
        dfs(i+1,r-1,k,ans*p[i]);//
        vis[i]=0;
        dfs(i+1,r,k,ans*(1-p[i]));//不买
        return ;
    }
    void Solve(int r)
    {
        for(int i=0;i<n;++i)
        {
            glores=glotot=0;
            memset(vis,0,sizeof(vis));
            dfs(0,r,i,1);
            ans[i]=glores/glotot;
        }
        return;
    }
    int main()
    {
        int coun=0;
        int r;
        while(~scanf("%d %d",&n,&r)&&(n+r))
        {
            for(int i=0;i<n;++i)
            {
                scanf("%lf",&p[i]);
            }
            Solve(r);
            printf("Case %d:
    ",++coun);
            for(int i=0;i<n;++i)
                printf("%.6f
    ",ans[i]);
        }
        return 0;
    }
  • 相关阅读:
    如何作需求
    AS400如何将Spooled File 拷贝到源物理文件
    AS400 批量FTP
    Oracle和db2/400的差别
    CL内建函数
    visio如何扩大画布的大小
    如何把C/S架构较为平滑的切换到SOA架构
    关于DataTable里大批量查找的更快速的方法
    c#键值对容器
    什么是委托
  • 原文地址:https://www.cnblogs.com/zhuanzhuruyi/p/6546110.html
Copyright © 2020-2023  润新知