C - Probability|Given UVA - 11181 (数学概率)
2017-07-27 13:25
288 查看
题目链接:点击打开链接
题意:n 个人去购物,只有 r 个人买东西,而剩下的 n - r 个人不买东西,给出每个人可能买东西的概率,让求每个人在那 r 个人中的概率;概率公式:P(A | B)= P(AB)/ P(B) ;P(A | B)指的是在 B 发生的情况下,A 发生的概率; P(AB) 指的是A 和B 同时发生的概率,P(B)指B 发生的概率;
在本题中,有 t1,t2,t3 三人,两人买东西,以 t1为例, P(A| B)是结果,P(AB)是 3 人中 2 人买东西且 t1 的概率,P(B)指全部两人买东西的概率;
例如:
n = 3,r = 2;
t1 = 0.1 ,t2 = 0.2 , t3 = 0.3
t1: P(AB)=0.1*0.2*0.7+0.1*0.8*0.3; P(B) = 0.1*0.2*0.7+0.1*0.8*0.3+0.9*0.2*0.3 所以 P(A | B)=P(AB)/ P(B)=0.413043;
详情见代码;
#include <iostream> #include<cstdio> #include<cstring> #include<string> #include<iomanip> #include<vector> #include<algorithm> using namespace std; int main() { int n,r; int kase=0; while(cin>>n>>r){ if(n==0&&r==0) break; double a[n+10]; for(int i=0;i<n;i++) scanf("%lf",&a[i]); string str; for(int i=0;i<n-r;i++) str+='0'; for(int i=n-r;i<n;i++) str+='1'; double num[n+10]; memset(num,0,sizeof(num)); double sum=0.0; do{ double ans=1.0; for(int i=0;i<str.length();i++){ if(str[i]=='1') ans=ans*a[i]; else ans=ans*(1-a[i]); } for(int i=0;i<n;i++){ if(str[i]=='1') num[i]+=ans; } sum+=ans; }while(next_permutation(str.begin(),str.end())); cout<<"Case "<<++kase<<":"<<endl; for(int i=0;i<n;i++){ cout<<fixed<<setprecision(6)<<num[i]/sum<<endl; } } return 0; }
相关文章推荐
- UVA - 11181 Probability|Given(条件概率+dfs枚举组合)
- UVA-11181 Probability|Given(概率)
- Probability|Given UVA - 11181
- UVA 11181(C) ——Probability|Given (条件概率, dfs求组合)
- UVA.11181 Probability|Given (概率)
- UVA 11181(数学概率)
- UVa 11181 - Probability|Given (条件概率)
- UVA 11181 Probability|Given (离散概率)
- uva 11181 - Probability|Given(概率)
- UVA - 11181 Probability|Given 概率 + 递归枚举子集
- uva 11181 Probability|Given 条件概率
- UVA - 11181 Probability|Given (dfs处理条件概率)
- 【UVA】11181 - Probability|Given(条件概率)
- Probability|Given UVA - 11181 ——全概率公式
- 集训第六周 数学概念与方法 UVA 11181 条件概率
- UVA 11181 Probability|Given 概率
- UVa 11181 (条件概率) Probability|Given
- Probability|Given - UVa 11181 概率dp
- uva 11181 - Probability|Given(概率)
- Uva 11181 Probability|Given(概率dp)