Uva 11181 Probability|Given

Problem's Link:   http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18546


Mean:

n个人去逛超市,第i个人会购买东西的概率是Pi。出超市以后发现有r个人买了东西,问你每个人购买东西的实际概率是多少。

analyse:

转换模型:

有n个员工,每个员工被选出来的概率是Pi。最后选出了r个,问你第i个员工在这r个中的概率是多少。

设:

事件A----第i个员工在这r个员工中。

事件B----从n中选出r个员工。

求的就是在B事件发生的情况下,A事件发生的概率。

Pb为从n个员工中选出r个员工的概率总和,也就是C(n,r)中选中的r个算的是pi,未选中的算(1-pi)。

Pa为第i个员工在选中的r个员工中的概率总和,这个可以在算上面那个的时候一并算出。

最后的答案就是Pa/Pb.

数据很小,直接用递归枚举所有的组合数就行。

Time complexity: O(n^2)

Source code: 

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-05-17-21.37
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define LL long long
#define ULL unsigned long long
using namespace std; int n,k;
double p[],ans[];
bool vis[];
void dfs(int N,int K) // 从N~n中选K个数的全部组合
{
if(!K)
{
double tmp=;
for(int i=;i<=n;++i)
if(vis[i]) tmp*=p[i];
else tmp*=(-p[i]);
ans[]+=tmp;
for(int i=;i<=n;++i)
if(vis[i]) ans[i]+=tmp;
}
else
{
for(int i=N;i<=n;++i)
{
vis[i]=;
dfs(i+,K-);//从i+1~n中再选K-1个数
vis[i]=;
}
}
} int main()
{
ios_base::sync_with_stdio(false);
cin.tie();
int Cas=;
while(cin>>n>>k,n+k)
{
for(int i=;i<=n;++i) cin>>p[i];
memset(vis,,sizeof vis);
memset(ans,,sizeof ans);
dfs(,k);
printf("Case %d:\n",Cas++);
for(int i=;i<=n;++i) printf("%.6lf\n",ans[i]/ans[]);
}
return ;
}
/* */

最新文章

  1. decode()函数
  2. js中getBoundingClientRect的作用及兼容方案
  3. CTE
  4. SQL 订阅发布备注
  5. 组内Linq培训记录
  6. html+css复习之第3篇 | jquery | bootstrap
  7. Vivado HLS与System Generator:联系与区别
  8. Redhat 官方Performance_Tuning_Guide
  9. PropertyGrid--为复杂属性提供编辑功能
  10. lvm的vg扩容
  11. 【深度学习笔记】(二)基于MNIST数据集的神经网络实验
  12. 搭建Hexo博客(一)-创建Hexo环境
  13. iOS10使用SecKeyCreateWithData读取公钥私钥
  14. 【Git使用】SourceTree可视化工具的安装和使用攻略
  15. 微信小程序奇奇怪怪的语法
  16. C#实现windows服务安装,服务名可配置时出问题(无法创建&#160;ProjectInstaller&#160;安装程序类型的实例)
  17. 使用SMTP发送邮件
  18. 为了拿Ph.D而做出的诺贝尔奖
  19. 独立线程监控配置文件是否变更,适用于更新了配置文件,不需要重启tomcat服务
  20. Codeforces Round #392(Div 2) 758F(数论)

热门文章

  1. Codeforces Round #379 (Div. 2) D. Anton and Chess 水题
  2. IOS开发 应用程序图标数字角标
  3. Navi.Soft30.开放平台.百度.开发手册
  4. HTML Hyperlink between and within pages
  5. Android studio NDK 编译 &quot;$USE_DEPRECATED_NDK=true&quot; 异常问题解决
  6. ORA-01654 索引 无法通过 表空间扩展
  7. Java基础集锦——利用Collections.sort方法对list排序
  8. Unity数据存储路径总结
  9. javascript 无语的==
  10. linux标准daemon编写方式