【Luogu4707】重返现世(min-max容斥)

题面

洛谷

求全集的\(k-max\)的期望

题解

\(min-max\)容斥的证明不难,只需要把所有元素排序之后考虑组合数的贡献,容斥系数先设出来后也不难解出。

那么我们来考虑如何求解\(k-max\),设出容斥系数\(f(|T|)\)

\[kmax(S)=\sum_{T\subset S}f(|T|)min(T)
\]

显然是从小到大考虑每个元素作为\(min\)时候的贡献,并且我们只需要其中第\(k\)大的贡献。

假设\(n=|S|\),那么对于第\(x\)大的数,有:

\[[n-x+1=k]=\sum_{i=0}^{n-x}{n-x\choose i}f(i+1)
\]

令\(x=n-x\)

\[[x=k-1]=\sum_{i=0}^{x}{x\choose i}f(i+1)
\]

直接套二项式反演:

\[f(x+1)=\sum_{i=0}^x(-1)^{x-i}{x\choose i}[i=k-1]
\]

显然只有\(i=k-1\)的时候才有贡献,也就是:

\[f(x+1)=(-1)^{x-k+1}{x\choose k-1}
\]

化简后得到:

\[f(x)=(-1)^{x-k}{x-1\choose k-1}
\]

好了,带回\(min-max\)容斥的式子,得到:

\[kmax(S)=\sum_{T\subset S}(-1)^{|T|-k}{|T|-1\choose k-1}min(T)
\]


回到这题,要求的就是\(kmax(All)\),发现题目中给出了限制\(|n-k|\le 10\),但是这样子符合条件的\(T\)依旧很多,那么我们按照\(min(T)\)来分类,而\(min(T)\)之和所有\(T\)中元素出现的概率的和相关,所以直接大力\(dp\)即可。

注意一下,题目里面的\(k\)对应到\(kmax\)的时候,应该是\(n-k+1\),也就是第\(n-k+1\)大的出现时间。

然后讲讲怎么\(dp\),设\(f[i][j]\)表示当前选定的集合的\(p\)的和为\(i\),组合数那里\(k=j\)。

对于当前物品而言,只有两种选择:要么加入集合,要么不加入。

如果不加入的话显然对于答案没有影响直接\(f'[i][j]\rightarrow f[i][j]\)。

否则的话加入这个元素之后会产生影响,考虑具体的转移究竟是什么。

首先\(\displaystyle f[j-p][k-1]=\sum(-1)^{i-(k-1)}{i-1\choose k-2}Cnt[i][j-p]\)。其中\(Cnt[i][j]\)表示集合大小为\(i\),其概率的和为\(j\)的方案数。

等号右边显然就是\(min-max\)容斥的式子,因为要求的只是方案数,所以后面并不是\(min\),而是方案数。

现在要做的就是强制把一个物品塞进去。

塞进去的影响是什么呢?集合大小强制多了\(1\),并且概率的和增加了,并且我们假装\(k\)也改变了。

所以塞进去后的式子是:\(\displaystyle \sum(-1)^{i-(k-1)}{i\choose k-1}Cnt[i][j-p]\)

因为组合数有简单的转移式:\(\displaystyle {n\choose m}={n-1\choose m}+{n-1\choose m-1}\)。

所以多出来的部分不难发现是\(\displaystyle -\sum(-1)^{i-k}{i-1\choose k-1}Cnt[i][j-p]\)

也就是\(-f[j-p][k]\)。

所以转移也就是:\(f[i][j]=f'[i][j]+f'[i-p][j-1]-f'[i-p][j]\)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 10100
#define MOD 998244353
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,k,m,p[1010],t,ans,N,nw,pw;
int f[2][10100][15],inv[MAX];
int main()
{
n=read();k=n-read()+1;m=read();
for(int i=1;i<=n;++i)p[i]=read();
if(!k){puts("0");return 0;}
for(int i=1;i<=k;++i)f[0][0][i]=MOD-1;
nw=1;pw=0;
for(int i=1,sum=0;i<=n;nw^=1,pw^=1,sum+=p[i++])
for(int j=0;j<=sum;++j)
for(int l=1;l<=k;++l)
if(f[pw][j][l])
{
add(f[nw][j][l],f[pw][j][l]);
add(f[nw][j+p[i]][l+1],f[pw][j][l]);
add(f[nw][j+p[i]][l],MOD-f[pw][j][l]);
f[pw][j][l]=0;
}
inv[0]=inv[1]=1;for(int i=2;i<=m;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=m;++i)add(ans,1ll*f[pw][i][k]*inv[i]%MOD);
ans=1ll*ans*m%MOD;printf("%d\n",ans);
return 0;
}

【Luogu4707】重返现世(min-max容斥)的更多相关文章

  1. Luogu P4707 重返现世 (拓展Min-Max容斥、DP)

    题目链接 https://www.luogu.org/problem/P4707 题解 最近被神仙题八连爆了-- 首先Min-Max容斥肯定都能想到,问题是这题要用一个扩展版的--Kth Min-Ma ...

  2. P4707 重返现世 扩展 MinMax 容斥+DP

    题目传送门 https://www.luogu.org/problem/P4707 题解 很容易想到这是一个 MinMax 容斥的题目. 设每一个物品被收集的时间为 \(t_i\),那么集齐 \(k\ ...

  3. Luogu4707 重返现世 min-max容斥、DP

    传送门 kthMinMax的唯一模板? 首先你需要知道kth Min-Max定理的内容:\(kthmax(S) = \sum\limits_{T \subseteq S} (-1)^{|T| - k} ...

  4. min-max 容斥

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

  5. Min-max 容斥与 kth 容斥

    期望的线性性: \[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 ...

  6. 【题解】洛谷P4707重返现世

    在跨年的晚上玩手机被妈妈骂了赶来写题……呜呜呜……但是A题了还是很开心啦,起码没有把去年的题目留到明年去做ヾ(◍°∇°◍)ノ゙也祝大家2019快乐! 这题显然的 kth min-max 容斥就不说了, ...

  7. [模板] 容斥原理: 二项式反演 / Stirling 反演 / min-max 容斥 / 子集反演 / 莫比乌斯反演

    //待更qwq 反演原理 二项式反演 若 \[g_i=\sum_{j=1}^i {\binom ij} f_j\] , 则有 \[ f_i=\sum_{j=1}^i (-1)^{i-j} {i \ch ...

  8. Min-Max容斥及其推广和应用

    概念 Min-Max容斥,又称最值反演,是一种对于特定集合,在已知最小值或最大值中的一者情况下,求另一者的算法. 例如: $$max(a,b)=a+b-min(a,b) \\\ max(a,b,c)= ...

  9. min-max容斥笔记及例题

    这个东西是一个非常好玩的数学工具. $$max(S)=\sum_{T\subset S}(-1)^{|T|-1}min(T)$$ $$max_k(S)=\sum_{T\subset S}(-1)^{| ...

随机推荐

  1. Jeecg-Boot Spring Boot

    Jeecg-Boot 1.0 发布,企业级快速开发平台 - 开源中国https://www.oschina.net/news/104889/jeecg-boot-1-0-released

  2. PHP常见错误汇总

    日常开发和调试的时候,经常会遇到一些错误,光怪陆离的不知所以,所以,特此将错误汇总一下,借鉴!!! 1. 原因分析:  一般可能是该文件出现了问题,检查一下代码和格式,是否出现开始的地方出现了空格,或 ...

  3. 如何入门vue之二

    学习完指令之后我们需要学习的就是组件. 在学习组件前我们要了解一下 methods 用来处理事件的. computed用来计算属性  他就是类似于data一样只不过是动态的处理数据 里面写的方法当成属 ...

  4. React Native之FlatList的介绍与使用实例

    React Native之FlatList的介绍与使用实例 功能简介 FlatList高性能的简单列表组件,支持下面这些常用的功能: 完全跨平台. 支持水平布局模式. 行组件显示或隐藏时可配置回调事件 ...

  5. linux 安装ssh以及ssh用法与免密登录

    想要免费登录就是把本地机器的id_rsa_pub的内容放到远程服务器的authorized_keys里面 一.配置yum和hosts文件 配置hosts文件: 命令:vi /etc/hosts 在文件 ...

  6. 使用PSR-4配合composer autoload 自动加载文件夹

    require 文件很麻烦,使用PSR-4搭配composer一次加载,终生受用. 感觉类似java中的import了,自己先记录一下最近理解的. 用composer管理自己的包吧 安装compose ...

  7. Oracle Flashback 详解

    Oracle flashback 是一种方便快捷的数据库恢复技术,它不使用备份文件,通过闪回日志可以使数据库恢复到过去的某个状态,当用户发生逻辑错误时(误删表数据.表.表空间等)需要快速恢复数据库,可 ...

  8. [转帖]windows+xshell+xming访问非桌面版Linux服务器

    windows+xshell+xming访问非桌面版Linux服务器 2016年06月05日 00:09:11 jxxiaohou 阅读数:11996 标签: Linux 更多 个人分类: Linux ...

  9. HDU 5898 odd-even number

    题目:odd-even number 链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5898 题意:给一个条件,问l 到r 之间有多少满足条件的 ...

  10. VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

    正常情况下在data里面都有做了定义 在函数里面进行赋值 这时候你运行时会发现,数据可以请求到,但是会报错 TypeError: Cannot set property 'listgroup' of ...