「UVA11181」 Probability|Given(概率

题意翻译

有n个人要去买东西,他们去买东西的概率为p[i]。

现在得知有r个人买了东西,在这种条件下,求每个人买东西的概率。

感谢@s_r_f 提供翻译

题目描述

PDF

输入输出格式

输入格式:

输出格式:

输入输出样例

输入样例#1: 复制

3 2
0.10
0.20
0.30
5 1
0.10
0.10
0.10
0.10
0.10
0 0

输出样例#1: 复制

Case 1:
0.413043
0.739130
0.847826
Case 2:
0.200000
0.200000
0.200000
0.200000
0.200000

题解

这个题面在讲什么鬼话?!!!(气哭

设$E$表示事件"有$r$个人买了东西",$E_i$表示事件"第$i$个人买了东西".

则根据公式,$P(E_i|E)=P({E_i}E)/P(E)$.

问题转化为求$P(E)$和求$P({E_i}E)$.

对于$P(E)$,用$dfs$枚举每个人买了与否.

设$dfs$到了第$i$个人,在它之前的人买与否构成的组合的概率为$now$,

那么若第$i$个人买,概率为$now*p[i]$,否则为$now*(1-p[i])$.

递推下去就好了.

当$dfs$到了第$n$个人,且正好有$r$个人买了,

那么$P(E)+=now$.

然后就是求$P({E_i}E)$了.

其实也差不多,只是多了一个"第$i$个人必须买"的限制,所以在$dfs$的时候强制第$i$个人买就行了.

 1  qwerta
 2 UVA11181 Probability|Given Accepted
 3 代码 C++,0.79KB
 4 提交时间 2018-10-26 18:50:22
 5 耗时/内存 200ms, 0KB
 6
 7 #include<iostream>
 8 #include<cstdio>
 9 using namespace std;
10 double p[23];
11 double pe;
12 int n,r;
13 void dfs(int x,int d,double now)
14 {
15     if(d>r)return;
16     if(x==n+1)
17     {
18         if(d==r)
19           pe+=now;
20         return;
21     }
22     //mark
23     dfs(x+1,d+1,now*p[x]);
24     //dismark
25     dfs(x+1,d,now*(1-p[x]));
26     return;
27 }
28 double pei;
29 void dfss(int x,int d,int i,double now)
30 {
31     if(d>r)return;
32     if(x==n+1)
33     {
34         if(d==r)
35           pei+=now;
36         return;
37     }
38     if(x==i)
39     {dfss(x+1,d+1,i,now*p[x]);return;}
40     //mark
41     dfss(x+1,d+1,i,now*p[x]);
42     //dismark
43     dfss(x+1,d,i,now*(1-p[x]));
44     return;
45 }
46 int main()
47 {
48     ios::sync_with_stdio(false);
49     int tim=0;
50     while(cin>>n>>r)
51     {
52         if(n==0)break;
53         printf("Case %d:\n",++tim);
54         for(int i=1;i<=n;++i)
55         cin>>p[i];
56         pe=0;
57         dfs(1,0,1);
58         for(int i=1;i<=n;++i)
59         {
60             pei=0;
61             dfss(1,0,i,1);
62             printf("%.6f\n",pei/pe);
63         }
64     }
65     return 0;
66 }

原文地址:https://www.cnblogs.com/qwerta/p/9858595.html

时间: 2024-10-14 18:11:49

「UVA11181」 Probability|Given(概率的相关文章

loj2537 「PKUWC2018」Minimax 【概率 + 线段树合并】

题目链接 loj2537 题解 观察题目的式子似乎没有什么意义,我们考虑计算出每一种权值的概率 先离散化一下权值 显然可以设一个\(dp\),设\(f[i][j]\)表示\(i\)节点权值为\(j\)的概率 如果\(i\)是叶节点显然 如果\(i\)只有一个儿子直接继承即可 如果\(i\)有两个儿子,对于儿子\(x\),设另一个儿子为\(y\) 则有 \[f[i][j] += f[x][j](1 - p_i)\sum\limits_{k > j}f[r][k] + f[x][j]p_i\sum\

Loj #2192. 「SHOI2014」概率充电器

Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生 活不可或缺的必需品!能充上电吗?现在就试试看吧!」 SHOI 概率充电器由 \(n-1\) 条导线连通了 \(n\) 个充电元件.进行充电时,每条导线是否可以导电以 概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经

大数据和「数据挖掘」是何关系?---来自知乎

知乎用户,互联网 244 人赞同 在我读数据挖掘方向研究生的时候:如果要描述数据量非常大,我们用Massive Data(海量数据)如果要描述数据非常多样,我们用Heterogeneous Data(异构数据)如果要描述数据既多样,又量大,我们用Massive Heterogeneous Data(海量异构数据)--如果要申请基金忽悠一笔钱,我们用Big Data(大数据) 编辑于 2014-02-2817 条评论感谢 收藏没有帮助举报作者保留权利 刘知远,NLPer 4 人赞同 我觉得 大数据

#2552. 「CTSC2018」假面

2552. 「CTSC2018」假面 一道"普及难度"DP题...然而考场上没想出来. 一堆人题解里说"只要会期望和逆元都能AC",我ssfd 还是在看完题解之后照着题解打的 大概就是设$f[i][j]$表示第$i$个人血量为$j$的概率 然而1号操作的转移就是$f[i][j]\leftarrow f[i][j](1-p)+f[i][j+1]p$. 二号操作就比较麻烦了. 可以枚举每个人,设$g[i]$为存活$i$个人的概率(不包括枚举的人),那么转移就是$g[i]

loj#2552. 「CTSC2018」假面

题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的概率,\(d_i\)为死掉的概率,\(g_{i,j}\)是除i以外活了j个人的概率 那个选中i人的答案就是 \[a_i\times\sum_{j = 0} ^{k - 1}\frac{g_{i,j}}{j + 1}\] 对于\(g_{i,j}\) ,设\(f_{i,j}\)表示前\(i\)个人有\(

loj#2076. 「JSOI2016」炸弹攻击 模拟退火

目录 题目链接 题解 代码 题目链接 loj#2076. 「JSOI2016」炸弹攻击 题解 模拟退火 退火时,由于答案比较小,但是温度比较高 所以在算exp时最好把相差的点数乘以一个常数让选取更差的的概率降低 代码 #include<ctime> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define gc getchar() #define

「Luogu4321」随机游走

「Luogu4321」随机游走 题目描述 有一张 \(n\) 个点 \(m\) 条边的无向图,\(Q\) 组询问,每次询问给出一个出发点和一个点集 \(S\) ,求从出发点出发随机游走走遍这个点集的期望步数. \(1 \leq n \leq 18, 1 \leq Q \leq 10^5\) 解题思路 : 听说是 \(\text{pkuwc2018d2t3}\) 加强版?但是原题时限是1s,各种卡不进去感觉一定要写 \(\text{Min-Max}\) 容斥,不过反正我今年听指导建议没报 \(\t

Loj #2541「PKUWC2018」猎人杀

Loj #2541. 「PKUWC2018」猎人杀 题目链接 好巧妙的题! 游戏过程中,概率的分母一直在变化,所以就非常的不可做. 所以我们将问题转化一下:我们可以重复选择相同的猎人,只不过在一个猎人被选择了过后我们就给他打上标记,再次选择他的时候就无效.这样与原问题是等价的. 证明: 设\(sum=\sum_iw_i,kill=\sum_{i被杀死了}w_i\). 攻击到未被杀死的猎人\(i\)的概率为\(P\). 则根据题意\(P=\frac{w_i}{sum-kill}\). 问题转化后:

分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践

当我们工作所在的系统处于分布式系统初期的时候,往往这时候每个服务都只部署了一个节点. 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家. 那么在这样的背景下,如果某个服务A需要发布一个新版本,往往会对正在运行的其它依赖服务A的程序产生影响.甚至,一旦服务A的启动预热过程耗时过长,问题会更严重,大量请求会阻塞,产