例10-11 uva11181

来源:互联网 发布:hash算法特点 编辑:程序博客网 时间:2024/06/05 03:46
题意:n个人去逛超市,第i个人买东西的概率是pi,,计算每个人实际买了东西的概率
思路:

搜索标处理所以的情况,得出所有概率和all(开始天真的以为是1 - -,就说怎么案例看着怪怪的),用tt[i]记录i参与买东西的概率和,tt[i]/all就是i实际买的情况


#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <cstdlib>#include <algorithm>typedef long long ll;using namespace std;int vis[25];int a,b;double p[25];double tt[25];double all;void fin(int n,int m){    if(m == b)    {        double tmp = 1.0;        for(int i = 1; i <= a; i++)        {            if(vis[i])tmp *= p[i];            else tmp *= (1-p[i]);        }        all += tmp;        for(int i = 1; i <= a; i++)        {            if(vis[i])                tt[i] += tmp;        }        return ;    }    else    {        for(int i = n+1;i <= a;i++)        {            vis[i] = 1;            fin(i,m+1);            vis[i] = 0;        }    }    return ;}int main(){    int cas = 1;    while(scanf("%d%d",&a,&b) != EOF && (a || b))    {        all = 0;        printf("Case %d:\n",cas++);        memset(vis,0,sizeof(vis));        memset(tt,0,sizeof(tt));        for(int i =1;i <= a;i++)        {            scanf("%lf",p+i);        }        fin(0,0);        for(int i = 1;i <= a;i++)        {            printf("%.6lf\n",tt[i]/all);        }    }    return 0;}


0 0