码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 11181 Probability|Given

时间:2017-09-28 13:05:18      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:printf   点击   个人   scanf   def   概率   main   turn   get   

有n个人准备去超市逛,其中第i个人买东西的概率是P i 。逛完以后你得知有r个人买了东
西。根据这一信息,请计算每个人实际买了东西的概率。输入n(1≤n≤20)和r(0≤r≤n),
输出每个人实际买了东西的概率。

 

概率

套公式

屠龙宝刀点击就送

#include <cstring>
#include <cstdio>
#define N 25

int n,r;
bool vis[N];
double p[N],z,ans[N];
void dfs(int pos,int num)
{
    if(num==r)
    {
        double tmp=1;
        for(int i=1;i<=n;++i)
        {
            if(vis[i]) tmp*=p[i];
            else tmp*=(1-p[i]);
        }
        z+=tmp;
        for(int i=1;i<=n;++i) if(vis[i]) ans[i]+=tmp;
    }
    for(int i=pos+1;i<=n;++i)
    {
        vis[i]=1;
        dfs(i,num+1);
        vis[i]=0;
    }
}
int Main()
{
    int Case=0;
    while(scanf("%d%d",&n,&r)!=EOF)
    {
        if(n==0&&r==0) break;
        z=0;
        memset(ans,0,sizeof(ans));
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;++i) scanf("%lf",&p[i]);
        dfs(0,0);
        printf("Case %d:\n",++Case);
        for(int i=1;i<=n;++i) printf("%.6lf\n",ans[i]/z);
    }
    return 0;
}
int sb=Main();
int main(int argc,char *argv[]){;}

 

UVA 11181 Probability|Given

标签:printf   点击   个人   scanf   def   概率   main   turn   get   

原文地址:http://www.cnblogs.com/ruojisun/p/7606034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!