首页 > 其他 > 详细

11181-Probability

时间:2014-08-15 18:00:59      阅读:224      评论:0      收藏:0      [点我收藏+]

不得不说这道题十分猥琐啊,递归求解,我RE了接近20次,最后发现还是数组开小了。

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<vector>
#include<string.h>
using namespace std;
int biao[250000],n,r,zhi = 0;
double p[250000],possi[250000];
int v[250000][25];
void dfs(int cur,int buy)
{
    if(cur == n)
    {
        if(buy != r) return;
        possi[zhi] = 1;
        for(int i = 0;i < n;i++)
        {
            if(biao[i]) v[zhi][i] = 1;
            else v[zhi][i] = 0;
        }
        for(int i = 0;i < n;i++)
        {
            if(biao[i])
                possi[zhi] *= p[i];
            else possi[zhi] *= (1 - p[i]);
        }
        zhi++;
        return;
    }
    biao[cur] = 1; //买
    dfs(cur + 1,buy + 1);
    biao[cur] = 0;  //不买
    dfs(cur + 1,buy);
}
int main()
{
//    freopen("out.txt","w",stdout);
    int kase = 0;
    while(cin>>n>>r)
    {
        if(!n && !r) break;
        printf("Case %d:\n",++kase);
        memset(v,0,sizeof(v));
        memset(p,0,sizeof(p));
        memset(possi,1,sizeof(possi));
        memset(biao,0,sizeof(biao));
        for(int i = 0;i < n;i++)
            cin>>p[i];
        dfs(0,0);
        double fenmu = 0;
        for(int i = 0;i < zhi;i++)
            fenmu += possi[i];
        for(int i = 1;i <= n;i++)  //看看哪个容器里有i,把i买了的概率求出来
        {
            double fenzi = 0;
            for(int j = 0;j < zhi;j++)
            {
                double temp = 1;int flag =0;
                if(v[j][i - 1])  //这种情况i买了
                {
                    flag = 1;
                    for(int k = 0;k < n;k++)
                    {
                        if(v[j][k]) temp *= p[k];
                        else temp *= (1 - p[k]);
                    }
                }
                if(flag) fenzi += temp;
            }
            printf("%.6lf\n",(double)fenzi*1.0/fenmu);
        }
    }
    return 0;
}


11181-Probability,布布扣,bubuko.com

11181-Probability

原文:http://blog.csdn.net/glqglqglq2/article/details/38586767

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!