[水题日常]UVA11181 条件概率(Probability|Given)
- 话说好久没写blog了
- 好好学概率论的第一天,这题一开始完全不会写,列出个条件概率的公式就傻了,后来看着lrj老师的书附带的代码学着写的…
- 因为我比较弱智 一些比较简单的东西也顺便写具体点或者是按照书上的说法写了(所以这一篇可能还会更偏向于笔记的样子…)…如果觉得没必要看的话可以直接跳下去
题意:\(n\)个人准备去买东西,第\(i\)个人买东西的概率是\(P_i\),买完东西之后你得知一共有\(r\)个人买了东西,求每个人实际买了东西的概率。(\(1<=n<=20\))
- 记\(r\)个人买了东西的事件为\(E\),第\(i\)个买东西的事件为\(E_i\),则我们要求的是\(P(E_i|E)\)
- 条件概率公式告诉我们\(P(E_i|E)=\frac {P(E_i E)}{P(E)}\) (\(P(E_i E)\)表示事件\(E_i\)和\(E\)同时发生的概率)
- 先来看看\(P(E)\)怎么求?首先注意到这题的\(n\)只有20我们直接枚举所有购买的情况,用一个数组\(buy[1..n]\)记录每个人是否买了东西(比如1表示买0表示没买)
- 直接\(dfs\)所有情况,枚举完一种有\(r\)个人购买的情况之后给\(P(E)\)加上这一种情况的概率:\(\prod_{i\in X} P_i\cdot\prod_{j\in Y} (1-P_j)\)(这里用\(X\)来表示所有买东西的人的集合,\(Y\)表示没有买东西的人的集合)(不要被这个东西吓到!,想想看假如3个人里有两个人买了东西,分别是第一个人和第三个人,那么这一种情况的概率是不是就是\(P_1\cdot(1-P_2) \cdot P_3\)?!)
- (上面那一串式子直接在搜的时候就顺便求出来)
- 啃完了硬骨头(对我来说是这样的)我们再来看看\(P(E_i E)\),跟上面的方法一样,枚举的时候顺便记录数组\(buy[]\),枚举完一种买\(r\)个东西的情况之后扫一遍\(buy[]\),如果记\(sum[i]\)表示最后的\(P(E_i E)\)的话,那样如果第\(i\)个人买了就给\(sum[i]\)加上上面那一串式子
- 最后对于每个询问输出\(sum[i]/P(E)\)就好啦~
最后还是贴一下代码吧(然而这个只是学着书上附带的代码自己打了一遍(写的应该还比较挫
要往下拉的请慎重!~
#include<cstdio>
#include<cstring>
int kase,n,r;
bool buy[25];double p[25],sum[25];
inline void dfs(int d,int c,double prob)
{
if(c>r||d-c>n-r+1)return;
if(d==n+1)
{
sum[n+1]+=prob;
for(int i=1;i<=n;i++)if(buy[i])
sum[i]+=prob;
return;
}
buy[d]=0;
dfs(d+1,c,prob*(1-p[d]));
buy[d]=1;
dfs(d+1,c+1,prob*p[d]);
}
int main()
{
while(scanf("%d%d",&n,&r)==2&&(n||r))
{
memset(sum,0,sizeof(sum));
memset(buy,0,sizeof(buy));
for(int i=1;i<=n;i++)scanf("%lf",&p[i]);
dfs(1,0,1.0);
printf("Case %d:\n",++kase);
for(int i=1;i<=n;i++)printf("%.6lf\n",sum[i]/sum[n+1]);
}return 0;
}
这里直接顺便用\(sum[n+1]\)表示了\(P(E)\)
顺便,可以注意一下这里\(dfs\)的
if(c>r||d-c>n-r+1)return;
第一个就是判断买的人有没有超过\(r\),超过的话直接剪枝,第二个判断这条路径上没有买的人是否超过应该没有买的人,超过的话也剪掉。(这样其实也保证了\(d=n+1\)时\(c=r+1\))
如果有问题欢迎在评论区指出~
[水题日常]UVA11181 条件概率(Probability|Given)的更多相关文章
- codevs 3070 寻找somebody4(水题日常)
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一天.....sb不见了,有个人要去找他..他发现sb在一个杨辉三角里.. ...
- [水题日常]Luogu1113 杂务
这几天又在颓. 我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x 如果有错误还请指出~ 写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的 QAQ完全 ...
- codevs 1487 大批整数排序(水题日常)
时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算 ...
- 51nod 1096 距离之和最小(水题日常)
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 X轴上有N个点,求X轴上一点使它到这N个点的距离之和最小,输出这个最小的距离之和. Input 第1行:点的数量 ...
- [水题日常]UVA1639 糖果(Candy,ACM/ICPC Chengdu 2012)
今天来尝试了几道数学期望相关的题,这是我认为比较有趣的一道题 这次不废话啦直接开始~ 一句话题意:两个分别装有n个糖果的盒子,每次随机选一个盒子然后拿走一颗糖(选的概率分别是\(p\)和\((1-p) ...
- vijos 1034 家族(水题日常)
描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是亲戚 ...
- 洛谷 P1181 数列分段Section I(水题日常)
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...
- codevs 2728 整数帝国问题(水题日常)
时间限制: 1 s 空间限制: 16000 KB 题目等级 : 白银 Silver 题目描述 Description 在很久以前,在遥远的东方,有一个整数帝国,它里面里居住着大量的正整数,了缓解都 ...
- codevs 1742 爬楼梯(水题日常)
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小明家外面有一个长长的楼梯,共N阶.小明的腿很长,一次能跨过一或两阶.有一天,他 ...
随机推荐
- Sound Forge批量转换音频格式,实现高效编辑音频
Sound Forge的批量处理功能可以实现批量格式转换.批量添加效果等功能,让用户可以在处理其他音频编辑任务的同时,自动完成格式转换.效果添加等重复性任务.接下来,一起来看看如何借助批处理转换器实现 ...
- 对Tarjan——有向图缩点算法的理解
开始学tarjan的时候,有关无向图的割点.桥.点双边双缩点都比较容易地理解了,唯独对有向图的缩点操作不甚明了.通过对luoguP2656_采蘑菇一题的解决,大致搞清了tarjan算法的正确性. 首先 ...
- Codeforces Round #669 (Div. 2) C. Chocolate Bunny 题解(交互)
题目链接 题目大意 有一个长度为n的全排列,你可以询问2n次,要你经过这个2n次的询问后,求出这个全排列 询问定义为:输入"? i j"输出\(p_{i} mod p_{j}\) ...
- Arduion学习(三)驱动温度传感器
一.实验目的: 1.将温度值打印显示在串口监视器 1.将温度值打印显示在串口,不同温度段显示不同的灯光,并在温度过高或过低时利用蜂鸣器报警. 二.实验准备: 1.查阅相关资料,了解本次实验所用到的引脚 ...
- 为什么不用UUID做主键?
不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用. 信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位 ...
- ASP.NET Core管道详解[6]: ASP.NET Core应用是如何启动的?[下篇]
要承载一个ASP.NET Core应用,只需要将GenericWebHostService服务注册到承载系统中即可.但GenericWebHostService服务具有针对其他一系列服务的依赖,所以在 ...
- 【2020.12.03提高组模拟】A组反思
估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...
- NetSuite实现pdf打印中的条形码的功能
2020-11-27 提起NS,在程序员这一块应该不怎么被人知道,算是比较小众的一门技术了,毕竟Netsuite兴起的时间算不上早,进入中国的时间更晚,除了从事这一块的程序员,可能都没有见过,恰好我是 ...
- 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...
- 为什么Python中称__lt__、__gt__等为“富比较”方法
Python中基类object提供了一系列可以用于实现同类对象进行"比较"的方法,可以用于同类对象的不同实例进行比较,包括__lt__.__gt__.__le__.__ge__._ ...