min-max容斥公式:

T为S中的子集,累加符号表示要求出S中的所有子集进行计算。

max(S):

表示S集合中出现元素的期望最大值,即所有元素全部出现时的期望。

min(T):

表示T集合中出现元素的期望最小值,即只要出现元素即可。

证明过程如果想要了解可以自行百度,涉及二项式反演内容。

例题1【hdu4336 Card Collector】:

给你n个物品,现在需要你将这n个物品都收集到背包中,每个物品都有一个被收集到背包中的概率,注意这n个物品并不独立,如果n个物品中其中一个物品在这一秒被收集到了背包中,那么其他n-1个物品这一秒将不会收集到背包中。

所以我们来利用这个公式进行计算。

此时我们需要求的是max(S),S为全集,因此我们需要枚举所有S的子集T,然后对于任意一个子集T来说,min(T)的概率为p1+p2+...+pk,则min(T)的期望为 1/(p1+p2+...+pk)。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#define rep(i,a,b) for(int i = a;i <= b;i++)
using namespace std;long double ga[30];
long double eps = 1e-7;
long double ans;
int n;void dfs(int pos,long double tmp,int cnt)
{if(pos == n){if(cnt != 0){if(cnt % 2 == 0)ans -= (long double)1/(1-tmp);elseans += (long double)1/(1-tmp);} return;}dfs(pos+1,tmp,cnt);dfs(pos+1,tmp*(1-ga[pos+1]),cnt+1);
}struct TestProctoring {double expectedTime(vector<int> p, vector<int> q) {n = p.size();for (int i = 1; i <= n; i++) {long double t1 = (long double) p[i-1];long double t2 = (long double) q[i-1];ga[i] = t1 / t2;  //p//    cout<<"ga: "<<ga[i]<<endl;}ans = 0;dfs(0,1,0);return ans;}
};

例题2【TopCoder-14766 TestProctoring】:

现在有n个学生,每个学生在每一秒都有一个概率,表示该学生在该时刻考完试的概率。

现在需要求所有学生考完试所需要的期望时间。

我们继续用这个公式进行求解。

max(S)就是我们所需要的答案,而此处的min(T),依然需要枚举S的所有子集进行求解。

对于每个子集T,其最小概率不是每个学生的概率累加,因为此处的学生是互相独立的,学生A在该时间考完试,不代表学生B在该时间考不完试。

因此此处的概率我们需要用1-(1-p1)*(1-p2)*...*(1-pk)来计算,先求出所有学生都无法完成考试的概率,再减去这个值就是最小的概率了。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define rep(i,a,b) for(int i = a;i <= b;i++)
using namespace std;
const int N = 30;int n;
double a[N];
double ans;void dfs(int pos,double tmp,int cnt)
{if(pos == n){if(cnt == 0) return;if(cnt % 2 == 0)ans -= (double)1/tmp;elseans += (double)1/tmp;return;}dfs(pos+1,tmp+a[pos+1],cnt+1);dfs(pos+1,tmp,cnt);
}int main()
{while(~scanf("%d",&n)){rep(i,1,n) scanf("%lf",&a[i]);ans = 0;dfs(0,0,0);printf("%f\n",ans);}return 0;
}

min-max容斥【概念+例题解析】相关推荐

  1. P3175 [HAOI2015]按位或(Min - Max容斥,FMT,概率期望,全网最清晰的题解!)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P3175 Prob ...

  2. 数学--数论--容斥定理完全解析(转)

    对容斥原理的描述 容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率. 描述 容斥原理可以描述如下: 要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来, ...

  3. min-max 容斥

    $\min - \max$ 容斥 Part 1 对于简单的$\min - \max$容斥有一般形式,表达为:$\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|-1 ...

  4. P5643-[PKUWC2018]随机游走【min-max容斥,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P5643 题目大意 给出nnn个点的一棵树,一个人从点xxx开始随机游走,然后QQQ次询问给出一个点集SSS,求期望 ...

  5. P4707-重返现世【dp,数学期望,扩展min-max容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/P4707 题目大意 nnn个物品,每次生成一种物品,第iii个被生成的概率是pim\frac{p_i}{m}mpi​ ...

  6. 51nod1355-斐波那契的最小公倍数【min-max容斥】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1355 题目大意 定义fif_ifi​表示斐波那契的第iii项,给出一个大 ...

  7. hdu4336-Card Collector【min-max容斥,期望概率】

    正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题目大意 每次获得第iii张牌的概率为pip_ipi​(每次只能获得一张),期望多少回合后 ...

  8. [集训队作业2018]小Z的礼物(min-max容斥,插头dp)

    传送门 这种求 "取到所有物品的期望时间" 的题一般都用 min−maxmin-maxmin−max容斥 解决: 设t(i,j)t(i,j)t(i,j)为取到格子(i,j)(i,j ...

  9. Min-Max容斥总结

    下用 max⁡k(S)\max_k(S)maxk​(S) 表示集合 SSS 的第 kkk 大元素(k⩽∣S∣k\leqslant|S|k⩽∣S∣),max⁡(S)\max(S)max(S) 表示集合 ...

  10. 《程序设计中的组合数学》——容斥定理

    在中学阶段的数学中,有诸如"一个班有7个语文满分,6个数学满分,5个英语满分--求满分的同学有多少个"的"多面手"问题,当时老师介绍的思路是画个图自己分配一下, ...

最新文章

  1. 六大主题报告,四大技术专题,AI开发者大会首日精华内容全回顾
  2. Appstate的几种状态及在android 和ios触发
  3. linux下scp远程拷贝文件无需输入密码工具之expect
  4. 【BUG解决】使用body-parser失效的实例解决
  5. C#进阶系列——AOP?AOP!
  6. 蚊子132谈IT团队工作的态度和技巧
  7. elementui 表头错位解决方法
  8. 集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布
  9. 关于PHP自定义采集图片脚本
  10. 【APP 测试】绕过华为手机打开 USB 调试需要先登录华为账号问题
  11. Excel如何来绘制不同函数的图像;不同数学符号可以在word中打处理;
  12. super expression must either be null or a function 报错解决方法
  13. 第四章:CPU体系结构笔记
  14. 要想学好平面设计,需要掌握一定的基本功和使用技巧
  15. 一位美国教授给研究生的怎样记读书笔记的建议(中文总结)
  16. 【转】一名大学生的PHP进阶之路
  17. 【Linux系统】第9节 linux系统中用户分类以及用户与组属性的修改示例
  18. hadoop和spark HA部署
  19. 【算法】五大常用算法最全面总结
  20. 气象接口返回图标_天气预报查询接口

热门文章

  1. 多线程编程(16) - 多线程同步之 WaitableTimer (等待定时器对象)[续二]
  2. JSON格式输出Struts2
  3. linux与windows文件共享——samba
  4. WF不是工作流(后续)
  5. 百度谷歌雅虎搜狗提交链接入口
  6. java中常量和变量的区别_Java中三种变量
  7. - -||计算机专业就业前景
  8. python通用权限管理框架图_PyCasbin: 支持 ACL、RBAC、ABAC 多种模型的 Python 权限管理框架...
  9. 节点本地范围和链路本地范围_微服务链路追踪——skywalking
  10. 故事到此为止了,谢谢遇见,让我成长。