Probability|Given UVA - 11181
2017-05-23 19:42
155 查看
Probability|Given UVA - 11181
数学·概率http://www.cnblogs.com/staginner/archive/2011/12/13/2286032.html
题目大意:
有n个人去超市买东西,给出r,每个人买东西的概率是p[i],当有r个人买东西的时候,第i个人恰好买东西的概率.题解:
设事件B为一共有r个人买了东西,设事件Ai为第i个人买了东西。那么这个题目实际上就是求P(Ai|B),而P(Ai|B)=P(AiB)/P(B),其中P(AiB)表示事件Ai与事件B同时发生的概率,同时总状态并不多,因此我们可以枚举买东西的状态预处理出P(AiB)和P(B),再代入计算即可。
Code:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 21; int bitcnt(int S){ int cnt=0; for(int i=0;(1<<i)<=S;i++){ if(S&(1<<i)) cnt++; } return cnt; } int main(){ freopen("a.in","r",stdin); int cas=0; int n,r; double p ,ap ; while(~scanf("%d%d",&n,&r) && (n||r)){ memset(ap,0,sizeof(ap)); double rp=0; for(int i=0;i<n;i++) scanf("%lf",&p[i]); for(int S=0;S<(1<<n);S++){ if(bitcnt(S)==r){ double ans=1; for(int i=0;i<n;i++){ if(S&(1<<i)) ans*=p[i]; else ans*=(1-p[i]); } rp+=ans; for(int i=0;i<n;i++){ if(S&(1<<i)) ap[i]+=ans; } } } printf("Case %d:\n",++cas); for(int i=0;i<n;i++) printf("%.6f\n",ap[i]/rp); } }
相关文章推荐
- C - Probability|Given UVA - 11181 (数学概率)
- Probability|Given UVA - 11181 ——全概率公式
- uva 11181 Probability|Given
- UVa 11181 Probability|Given
- UVA 11181 Probability|Given
- UVA - 11181 Probability|Given(条件概率+dfs枚举组合)
- UVa 11181 Probability|Given (DFS&贝叶斯公式)
- Uva - 11181 Probability|Given (条件概率)
- UVa 11181 Probability|Given
- uva11181 - Probability|Given 条件概率
- 【UVA】11181 - Probability|Given(条件概率)
- UVA 11181(C) ——Probability|Given (条件概率, dfs求组合)
- Uva 11181 - Probability|Given
- uva 11181 - Probability|Given
- UVA - 11181 Probability|Given (dfs处理条件概率)
- uva 11181 - Probability|Given(枚举,贝叶斯公式)
- UVa 11181 - Probability|Given (条件概率)
- Probability|Given - UVa 11181 概率dp
- uva 11181 - Probability|Given
- uva 11181 Probability|Given