uva11181(条件概率)
来源:互联网 发布:威少西部决赛数据 编辑:程序博客网 时间:2024/06/10 01:50
题目大意:
现在有n个人去超市逛,其中第i个人买东西的概率是Pi。逛完以后你得知有r个人买了东西,输出每个人实际买了东西的概率。
题目分析:
E:r个人买了东西,Ei:第i个人买了东西,则题目所求的为P(E|Ei)。
根据条件概率公式,P(E|Ei)=P(EEi)/P(E)。而求P(E)可以用全概率公式,利用二进制枚举出可能的情况,然后分别算出这些情况发生的概率,这些概率之和即是P(E)的值,至于P(EEi)可以在计算P(E)时,对于所有可能的情况分别判断第i个人是否买了东西,如果是P(EEi)的值加上这种情况的概率即可。
代码:
#include <cmath>#include <vector>#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int maxn=20+5;int n,r,Case=1;double all;int num[maxn];double p[maxn],out[maxn];int Count(int m,string& str){ int cnt=0; while(m) { if(m&1){ cnt++; str+="1"; } else { str+="0"; } m>>=1; } while((int)str.length()<n) { str+="0"; } return cnt;}void print(){ printf("Case %d:\n",Case++); for(int i=1;i<=n;i++){ printf("%.6lf\n",out[i]/all); }}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); ios::sync_with_stdio(false); while(cin>>n>>r) { all=0; if(!n&&!r) break; for(int i=1;i<=n;i++){ out[i]=0; cin>>p[i]; } for(int k=0;k<pow(2,n);k++){ string s; if(Count(k,s)==r){ double p1=1; for(int j=0;j<n;j++){ if(s[j]=='1'){ p1=p1*p[j+1]; } else { p1=p1*(1-p[j+1]); } } all+=p1; for(int j=0;j<n;j++){ if(s[j]=='1'){ out[j+1]+=p1; } } } } print(); } return 0;}
阅读全文
0 0
- uva11181(条件概率)
- UVa11181 条件概率(紫书327页)
- uva11181 条件概率
- uva11181 - Probability|Given(条件概率)
- uva11181 - Probability|Given 条件概率
- 【条件概率】Probability|Given, UVa11181
- uva11181(概率)
- uva11181(概率)
- UVa11181 - Probability|Given(离散条件概率)
- UVA11181 - Probability|Given(概率)
- uva11181(概率)
- [UVA11181] Probability|Given && 概率
- UVa11181 Probability|Given DFS+概率
- UVa11181
- lightoj1104( 条件概率)
- 枚举,预处理,条件概率(条件概率,uva 11181)
- 条件概率
- 条件概率
- google vr 简介
- QT 写EXCEL+多线程
- FP Tree算法原理总结
- thinkphp5 验证码
- hive表类型---桶表、分区表
- uva11181(条件概率)
- KVC
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
- Excel批量去除每行的前面几个字符
- jsonp协议原理深度解析
- String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)转换
- PHP微信公众平台接口(四)——消息的接收和发送
- Python爬虫之Spark Streaming任务监控
- B-树和B+树的应用:数据搜索和数据库索引