11181 - Probability|Given
来源:互联网 发布:React双向数据绑定原理 编辑:程序博客网 时间:2024/06/06 18:42
根据贝叶斯公式:(百度百科) ,即条件概率的一个推广。 我们需要求出每个人在B这个前提条件下的概率,再除以tot(r个人买东西的概率) 即可得到答案。一开始用递归穷举,结果超时,后来发现,原来我是老老实实的枚举了一遍,但是这个过程中可能存在大量的重复现象。正确的策略是只枚举当前人之后的人。还有一点需要注意的是当n = 1,r = 0 ,P = 1.0 这个数据是不存在的。 因为这时会发生除0错误。所以下面代码中有一些是不必要的。
#include<bits/stdc++.h>using namespace std;int n,r,A[25];double p[25],sum[25],tot;void dfs(int k ,int cur) { if(cur==r) { double cur_p=1; for(int i=1;i<=n;++i){ if(!A[i]) cur_p*=(1-p[i]); else cur_p*=p[i]; } tot+=cur_p; for(int i=1;i<=n;++i) if(A[i]==1) sum[i]+=cur_p; } else for(int i=k;i<=n;++i) { if(!A[i]) { A[i]=1; dfs(i+1,cur+1); A[i]=0; } }}int main() { int maxn = 0; while(scanf("%d%d",&n,&r)!=EOF) { if(n==0&&r==0) return 0; for(int i=1;i<=n;i++) scanf("%lf",&p[i]); memset(A,0,sizeof(A)); memset(sum,0,sizeof(sum)); printf("Case %d:\n",++maxn); tot = 0; dfs(1,0); if(tot==0) for(int i=1;i<=n;i++) //这个部分是不需要的。 printf("%.6lf\n",0.0); else for(int i=1;i<=n;i++) printf("%.6lf\n",sum[i]/tot); } return 0;}
0 0
- uva 11181 Probability|Given
- Probability Given, UVa 11181
- 11181 - Probability|Given
- Uva 11181 - Probability|Given
- UVA 11181 Probability|Given
- UVa 11181 Probability|Given
- Uva--11181--Probability|Given
- uva 11181 Probability|Given
- UVA 11181 - Probability|Given
- uva 11181 - Probability|Given
- UVA 11181 Probability|Given
- 11181 - Probability|Given
- uva 11181 Probability|Given
- UVa 11181 Probability|Given
- UVa 11181 Probability|Given
- UVA 11181 Probability|Given
- UVa 11181 Probability|Given
- UVa 11181 - Probability|Given 概率
- c学习笔记
- String 与StringBuilder
- Paraview与VTK学习笔记(五)
- ContentProvider数据库共享之——读写权限与数据监听
- C# WInform TextChanged MessageBox.Show冲突的临时解决办法
- 11181 - Probability|Given
- iOS开发中自动获取当前位置(GPS定位)
- iOS 通知中心扩展制作入门
- 蓝桥杯 ALGO-53 最小乘积(基本型)(水题)
- 正则表达式语法
- appium1.3.7的坑-Original error: Could not initialize ideviceinstaller; make sure it is installed ...
- oracle 查询表空间所有表、及表所有的表空间
- 湖北水泵哪家好?首选中美合资武汉诺赛泵业
- RUP 4+1