「hdu - 6355」Fireflies
DAG 上的可重最小链覆盖,转化成偏序集的最大反链,其中偏序 当且仅当每一维 。
以下记 。考虑如下的等价问题:
给定包含 种元素的多重集 ,其中 种元素出现 次。
定义子集之间的偏序为 ,求最大反链。
当 时即 Sperner 定理。事实上,该定理可以推广得到如下结果:
记 ,则选择所有大小为 的子集即达到最大反链。
考虑证明。
LYM 不等式:
记反链中大小为 的子集数量为 ,有:
证明:
考虑一条最长链 ,其中 。
包含某个大小为 的子集 的最长链数量为 。所有最长链总数为 。
对于一条反链,没有两个子集在同一个最长链上,所以有不等式:
得证。
Sperner 定理:
元集合,最多能选出 个子集,满足没有任何两个子集之间存在包含关系,。
证明:
不难发现这是一个下界,考虑证明它同时也是上界。
由于 ,所以 ,得到 ,于是它为上界。
然而很可惜的是,我并不会按照这个思路推广(查了 wiki 也不会,水平有限)。
考虑另一种证法(在《Introductory Combinatorics》中的 5.6 写到了这种证法)。
依然只需要证明上界,考虑用 Dilworth 定理转化,只需要找到一个大小为 的链覆盖。
引入对称链的概念:我们称子集链 是对称链,当且仅当 且 。
注意到每条对称链恰好包含一个大小为 的子集,因此对称链覆盖大小一定为 。
归纳构造对称链覆盖,只有一个元素时是平凡的,考虑往已经求出链覆盖的集合中加入元素 。
对于原来的链覆盖中每条对称链 ,分两种情况:
(1),在新的链集中加入链 。
(2),在新的链集中加入链 与 。
不难发现它仍然是链覆盖(每个子集都不重不漏地被包含在某条链中),且每条链仍然是对称链。
这个证法就比较好推广到多重集上了。
多重集情况的证明:
大致思路一致,归纳构造对称链,每次加入 个元素 。为了方便,以下记 表示 个元素 。
对于链覆盖中每条对称链 ,依次在新的链集中加入如下的链(如果长度不够了就不管):
依然不难发现它仍然是链覆盖,且每条链仍然是对称链。
由于每条对称链都包含恰好一个大小为 的子集,因此这就是上界。
之后就是个经典容斥,可以将组合数拆成 次多项式,然后 meet in the middle 即可。
直接做 ,不知道能不能 ,口胡了个失败的做法(悲)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现