期望的线性性:

\[E(x+y)=E(x)+E(y)
\]

证明:

\[E(x+y)=\sum_i \sum_j(i+j)*P(i=x,j=y)
\]
\[=\sum_i\sum_ji*P(i=x,j=y)+\sum_i\sum_jj*P(i=x,j=y)
\]
\[=\sum_ii*P(i=x)+\sum_jj*P(j=y)
\]
\[=E(x)+E(y)
\]

Min - Max 容斥:

我们现在有一个全集 \(U= \lbrace{a_1,a_2,a_3,...,a_n}\rbrace\)

我们设:

\[\begin{cases}
{\max(S)=\max\limits_{a_i∈S}a_i}\\

{\min(S)=\min\limits_{a_i∈S}a_i}\\
\end{cases}
\]

有:

\[\begin{cases}
\max(S)=\sum_{T \in S}\limits(-1)^{|T|-1}\min(T)\\

\min(S)=\sum_{T \in S}\limits(-1)^{|T|-1}\max(T)\\
\end{cases}

\]

二项式反演证明:

我们想构造一个函数 \(f\) ,使得:

\[\max(S)=\sum_{T \in S}\limits f(T)\min(T)
\]

然后依然考虑一个元素排序后在哪些集合产生贡献

假设某个元素从小到大后排在第 \(x\) 位(集

合大小为 \(n\)),那么它的贡献就是:

\[[x = n] *val=\sum_{i=0}^{n-x}\left(\begin{array}{c}n-x\\ i\end{array}\right)f(i+1)*val
\]
\[[x = n]=\sum_{i=0}^{n-x}\left(\begin{array}{c}n-x\\ i\end{array}\right)f(i+1)
\]

变换一下:

\[[n-x = 0]=\sum_{i=0}^{n-x}\left(\begin{array}{c}n-x\\ i\end{array}\right)f(i+1)
\]
\[[x = 0]=\sum_{i=0}^{x}\left(\begin{array}{c}x\\ i\end{array}\right)f(i+1)
\]

二项式反演:

\[f(n+1)=\sum_{i=0}^n(-1)^{n-i}\left(\begin{array}{c}n\\ i\end{array}\right)[i=0]
\]
\[f(n+1)=(-1)^{n}\left(\begin{array}{c}n\\ 0\end{array}\right)=(-1)^n
\]
\[f(n)=(-1)^{n-1}
\]

于是:

\[\max(S)=\sum_{T \in S}\limits(-1)^{|T|-1}\min(T)
\]

证毕


kth 容斥:

\[Kthmax(S)=\sum_{T⊆S}(-1)^{|T|-k}\left(\begin{array}{c}{|T|-1}\\ {k-1}\end{array}\right)min(T)
\]

证明:

设:

\[Kthmax(S)=\sum_{T⊆S}f(T)min(T)
\]

假设某个元素从小到大后排在第 \(x\) 位(集

合大小为 \(n\)),有:

\[[x =n-k+1] *val=\sum_{i=0}^{n-x}\left(\begin{array}{c}n-x\\ i\end{array}\right)f(i+1)*val
\]
\[[x = n-k+1]=\sum_{i=0}^{n-x}\left(\begin{array}{c}n-x\\ i\end{array}\right)f(i+1)
\]

变换一下:

\[[n-x=k-1 ]=\sum_{i=0}^{n-x}\left(\begin{array}{c}n-x\\ i\end{array}\right)f(i+1)
\]
\[[x = k-1]=\sum_{i=0}^{x}\left(\begin{array}{c}x\\ i\end{array}\right)f(i+1)
\]

二项式反演:

\[f(n+1)=\sum_{i=0}^{n}(-1)^{n-i}\left(\begin{array}{c}n\\ i\end{array}\right)[i=k-1]
\]
\[f(n+1)=(-1)^{n-k+1}\left(\begin{array}{c}n\\ k-1\end{array}\right)
\]
\[f(n)=(-1)^{n-k}\left(\begin{array}{c}n-1\\ k-1\end{array}\right)
\]

于是:

\[Kthmax(S)=\sum_{T⊆S}(-1)^{|T|-k}\left(\begin{array}{c}|T|-1\\ k-1\end{array}\right)min(T)
\]

证毕


Min-Max容斥定理在期望下也成立:

\[\begin{cases}

E(\max(S))=\sum_{T \in S}\limits(-1)^{|T|-1}E(\min(T))\ \ (1)\\
\\
E(\min(S))=\sum_{T \in S}\limits(-1)^{|T|-1}E(\max(T))\ \ (2)\\
\\
E(Kthmax(S))=\sum_{T⊆S}(-1)^{|T|-k}\left(\begin{array}{c}|T|-1\\ k-1\end{array}\right)E(min(T))\ \ (3)\\

\end{cases}

\]

以 \((1)\) 为例:

\[E(\max(S))=\sum_{T \in S}\limits(-1)^{|T|-1}E(\min(T))
\]

证明:

由于:

\[\max(S)=\sum_{T \in S}\limits(-1)^{|T|-1}\min(T)
\]

有:

\[E(\max(S))=E(\sum_{T \in S}\limits(-1)^{|T|-1}\min(T))
\]

由期望的线性性,直接整理,得:

\[E(\max(S))=\sum_{T \in S}\limits(-1)^{|T|-1}E(\min(T))
\]

证毕

[HAOI2015]按位或

#include<bits/stdc++.h>
using namespace std;
int n;
int cnt[1<<20];
double p[1<<20],ans;
int main(){
scanf("%d",&n);
for(int s=0;s<(1<<n);s++){
scanf("%lf",&p[s]);
cnt[s]=cnt[s>>1]+(s&1);
}
for(int i=1;i<(1<<n);i<<=1){
for(int s1=0;s1<(1<<n);s1+=(i<<1)){
for(int s2=0;s2<i;s2++){
p[i+s1+s2]+=p[s1+s2];
}
}
}
for(int i=1;i<(1<<n);i++)if(1-p[i^((1<<n)-1)])ans+=((cnt[i]&1)?1:-1)/(1-p[i^((1<<n)-1)]);
if(ans<1e-10)puts("INF");
else printf("%.10lf",ans); return 0;
}

重返现世

#include<bits/stdc++.h>
using namespace std;
int n,m,t;
long long dp[15][10005];
const long long md=998244353;
inline long long pwr(long long x,long long y){
long long res=1;
while(y){
if(y&1)res=res*x%md;
x=x*x%md;y>>=1;
}return res;
}
int main(){
scanf("%d%d%d",&n,&t,&m);
t=n-t+1;dp[0][0]=1;
for(int i=1;i<=n;i++){
int p;scanf("%d",&p);
for(int k=m;k>=p;k--){
for(int j=t;j;j--){
dp[j][k]=(dp[j][k]+dp[j-1][k-p]-dp[j][k-p])%md;
}
}
}
long long ans=dp[t][0];
for(int i=1;i<=m;i++)ans=(ans+dp[t][i]*pwr(i,md-2)%md)%md;
printf("%lld",(ans+md)*m%md); return 0;
}

[PKUWC2018]随机游走

#include<bits/stdc++.h>
using namespace std;
int n,q,rt;
int ver[45],ne[45],head[45],tot,deg[45];
inline void link(int x,int y){
ver[++tot]=y;
ne[tot]=head[x];
head[x]=tot;deg[y]++;
}
long long a[21],b[21];
const long long md=998244353;
inline long long pwr(long long x,long long y){
long long res=1;
while(y){
if(y&1)res=res*x%md;
x=x*x%md;y>>=1;
}return res;
}
void dfs(int x,int fi,int S){
if((S>>(x-1))&1)return ;
long long tota=0,totb=0;
for(int i=head[x];i;i=ne[i]){
int u=ver[i];
if(u==fi)continue;
dfs(u,x,S);
tota=(tota+a[u])%md;totb=(totb+b[u])%md;
}
a[x]=pwr(deg[x]-tota,md-2);
b[x]=(deg[x]+totb)%md*a[x]%md;
}
long long dp[1<<18];
int cnt[1<<18];
int main(){
scanf("%d%d%d",&n,&q,&rt);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
link(x,y);link(y,x);
}//puts("111");
for(int s=1;s<(1<<n);s++){
cnt[s]=cnt[s>>1]+(s&1);
for(int i=1;i<=n;i++)a[i]=b[i]=0;
dfs(rt,rt,s);dp[s]=(cnt[s]&1?1:-1)*b[rt];
}//puts("222");
for(int i=0;i<n;i++){
for(int s=0;s<(1<<n);s++){
if((s>>i)&1)continue;
dp[s|(1<<i)]=(dp[s|(1<<i)]+dp[s])%md;
}
}
while(q--){
int k,s=0;
scanf("%d",&k);
while(k--){
int x;scanf("%d",&x);
s|=(1<<(x-1));
}printf("%lld\n",(dp[s]+md)%md);
} return 0;
}

Min-max 容斥与 kth 容斥的更多相关文章

  1. 在一定[min,max]区间,生成n个不重复的随机数的封装函数

    引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接 var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,m ...

  2. LINQ to SQL Count/Sum/Min/Max/Avg Join

    public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...

  3. 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]

    [本文链接] http://www.cnblogs.com/hellogiser/p/find-min-max-of-array.html [题目] 对于一个由N个整数组成的数组,需要比较多少次才能把 ...

  4. LINQ Count/Sum/Min/Max/Avg

    参考:http://www.cnblogs.com/peida/archive/2008/08/11/1263384.html Count/Sum/Min/Max/Avg用于统计数据,比如统计一些数据 ...

  5. 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题

    http://www.cnblogs.com/cvbnm/articles/1947743.html 多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 < ...

  6. LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg

    LINQ  to SQL 语句(3) 之  Count/Sum/Min/Max/Avg [1] Count/Sum 讲解 [2] Min 讲解 [3] Max 讲解 [4] Average 和 Agg ...

  7. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

    在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...

  8. 动态规划——min/max的单调性优化总结

    一般形式: $max\{min(ax+by+c,dF(x)+eG(y)+f)\},其中F(x)和G(y)是单调函数.$ 或 $min\{max(ax+by+c,dF(x)+eG(y)+f)\},其中F ...

  9. Hive函数:SUM,AVG,MIN,MAX

    转自:http://lxw1234.com/archives/2015/04/176.htm,Hive分析窗口函数(一) SUM,AVG,MIN,MAX 之前看到大数据田地有关于max()over(p ...

随机推荐

  1. i2c调试工具分享

    i2c-tools简介 在嵌入式开发仲,有时候需要确认硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试I2C总线的工具--i2c-tools. i2c-tool ...

  2. Arch Linux 安装简明流程

    Arch Linux 安装简明流程 这是一篇为 GPT/EFI 引导 的电脑安装 Arch Linux(双系统)的中文简明流程,尽可能省略了可以省略的流程与文字以使得篇幅尽量短小,基本上基于 Arch ...

  3. Java 8的18个常用日期处理

    Java 8的18个常用日期处理 一.简介 伴随 lambda表达式.streams 以及一系列小优化,Java 8 推出了全新的日期时间API. Java处理日期.日历和时间的不足之处:将 java ...

  4. python学习-Day32

    目录 今日内容详细 软件开发架构 概念 软件开发架构的分类 C/S架构 B/S架构 两种架构的优缺点 C/S架构: B/S架构: tip 网络编程 概念 互联网 互联网协议 OSI七层协议简介 专业设 ...

  5. ONNX Runtime 源码阅读:Graph::SetGraphInputsOutputs() 函数

    目录 前言 正文 总结 前言 为了深入理解ONNX Runtime的底层机制,本文将对 Graph::SetGraphInputsOutputs() 的代码逐行分析. 正文 首先判断Graph是否从O ...

  6. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

  7. TS 自学笔记(二)装饰器

    TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# ...

  8. 实战派 | Java项目中玩转Redis6.0客户端缓存!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过tel ...

  9. TENSEAL: A LIBRARY FOR ENCRYPTED TENSOR OP- ERATIONS USING HOMOMORPHIC ENCRYPTION 解读

    本文记录阅读该paper的笔记,这篇论文是TenSeal库的原理介绍. 摘要 机器学习算法已经取得了显著的效果,并被广泛应用于各个领域.这些算法通常依赖于敏感和私有数据,如医疗和财务记录.因此,进一步 ...

  10. Git合并上的问题

    关于Git合并上问题的处理 在前几天对某个游戏章节的bug修改完成,主程让我把dev_7的内容合并到dev_8上.虽然很少使用Fork,但是还是硬着头皮说行. 合并前,先将分支切换到dev_8,选择d ...