UVA 11181(数学概率)
2015-05-08 20:58
471 查看
有n个人去超市,第i个人买东西的概率为p[i],逛完之后又r个人买了东西,求每个人实际买东西的概率。
条件概率公式的应用,具体分析见算法竞赛入门经典第二版p327
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100 + 10;
double p[maxn],a[maxn];
int n;
double dfs(int cur,int lft,double pnow)
{
if(lft==0){
if(cur==n+1)return pnow;
return dfs(cur+1,lft,pnow*(1-p[cur]));
}
if(n-cur+1<lft) return 0.0;
double res = 0;
double p1 = dfs(cur+1,lft-1,pnow*p[cur]);
double p2 = dfs(cur+1,lft,pnow*(1.0-p[cur]));
res = p1 + p2;
a[cur] += p1;
return res;
}
int main(int argc, char const *argv[])
{
int r;
for(int cas = 1; scanf("%d%d",&n,&r)==2; ++cas) {
memset(a,0,sizeof a);
if(n==0&&r==0)return 0;
for(int i = 1; i <= n; i++) {
scanf("%lf",p+i);
}
double tot = dfs(1,r,1.0);
printf("Case %d:\n", cas);
for(int i = 1; i <= n; i++)printf("%.6f\n", a[i]/tot);
}
return 0;
}
条件概率公式的应用,具体分析见算法竞赛入门经典第二版p327
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100 + 10;
double p[maxn],a[maxn];
int n;
double dfs(int cur,int lft,double pnow)
{
if(lft==0){
if(cur==n+1)return pnow;
return dfs(cur+1,lft,pnow*(1-p[cur]));
}
if(n-cur+1<lft) return 0.0;
double res = 0;
double p1 = dfs(cur+1,lft-1,pnow*p[cur]);
double p2 = dfs(cur+1,lft,pnow*(1.0-p[cur]));
res = p1 + p2;
a[cur] += p1;
return res;
}
int main(int argc, char const *argv[])
{
int r;
for(int cas = 1; scanf("%d%d",&n,&r)==2; ++cas) {
memset(a,0,sizeof a);
if(n==0&&r==0)return 0;
for(int i = 1; i <= n; i++) {
scanf("%lf",p+i);
}
double tot = dfs(1,r,1.0);
printf("Case %d:\n", cas);
for(int i = 1; i <= n; i++)printf("%.6f\n", a[i]/tot);
}
return 0;
}
相关文章推荐
- 集训第六周 数学概念与方法 UVA 11181 条件概率
- UVA - 11181 Probability|Given 概率 + 递归枚举子集
- UVA 11021 - Tribles (数学概率)
- C - Probability|Given UVA - 11181 (数学概率)
- uva 11181 概率与排列
- UVA-11181 Probability|Given(概率)
- UVA 11181 dfs 概率
- Uva - 11181 Probability|Given (条件概率)
- uva 11181(条件概率)
- UVa 11181 (条件概率) Probability|Given
- UVA 11181(C) ——Probability|Given (条件概率, dfs求组合)
- uva 11181 - Probability|Given(概率)
- 枚举,预处理,条件概率(条件概率,uva 11181)
- UVA 11021 Tribbles [数学概率]
- uva 11427 数学-概率
- uva 11021 数学概率 麻球
- UVa 10900 So you want to be a 2n-aire? (概率DP,数学)
- uva11181(条件概率)
- uva 11021 Tribles(数学:概率+递推)
- Probability|Given - UVa 11181 概率dp