uva 11181(贝叶斯公式)

来源:互联网 发布:詹姆斯社交软件头像 编辑:程序博客网 时间:2024/06/06 02:40

题意:

n个人,给每个人购买东西的概率p[i]。

设其中有r个人买了东西,问每个人买东西的概率是多少。


解析:

问导致结果的条件概率是多少用贝叶斯公式。


代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long longusing namespace std;const int maxn = 1e6;const int inf = 0x3f3f3f3f;const double eps = 1e-8;const double pi = 4 * atan(1.0);const double ee = exp(1.0);int n, r;double mu;double zi[20 + 10];double p[20 + 10];double dfs(int cnt, int num, double pi){    if (cnt == n)        return num ? 0.0 : pi;    double sum = 0.0;    if (num)    {        sum += dfs(cnt + 1, num - 1, pi * p[cnt]);        zi[cnt] += sum;    }    sum += dfs(cnt + 1, num, pi * (1 - p[cnt]));    return sum;}int main(){    #ifdef LOCAL    freopen("in.txt", "r", stdin);    #endif // LOCAL    int ca = 1;    while (~scanf("%d%d", &n, &r))    {        if (!n && !r)            break;        memset(zi, 0, sizeof(zi));        for (int i = 0; i != n; ++i)            scanf("%lf", &p[i]);        double mu = dfs(0, r, 1.0);        printf("Case %d:\n", ca++);        for (int i = 0; i != n; ++i)            printf("%.6lf\n", zi[i] / mu);    }    return 0;}


0 0
原创粉丝点击