当前位置: 首页 > news >正文

贡献转 $01$

问题形式

定义将序列 \(a\) 变成序列 \(b\) 的代价是 \(\sum_{i=1}^{m} |a_i - b_i|\)。求使得序列 \(b\) 满足条件 \(A\)\(a\) 变成 \(b\) 的最小代价。

适用条件

  1. 偏序限制:条件 \(A\) 是形如若干 \(a_i \le a_j\)

  2. 可差分:将 \(x\) 变成 \(y\) 的代价是 \(|x - y|\)

做法

\(a^k\) 是将 \(a\) 序列中 \(\le k\) 的数赋值成 \(0\),将大于 \(k\) 的数赋值成 \(1\) 得到的新序列。答案是使所有 \(k \in \mathbb{Z}\)\(a^k\) 满足条件 \(A\) 的最小代价的和。

证明

  1. 这是答案下界:记 \(f(S)\) 表示将 \(S\) 变成满足条件 \(A\) 的最小代价。由条件 \(2\) 可得,\(|x - y| = \sum_{k \in \mathbb{Z}} |[x > k] - [y > k]|\),所以
    \(\sum_{i=1}^{n} |a_i - b_i| = \sum_{i=1}^{n} \sum_{k \in \mathbb{Z}} |[a_i > k] - [b_i > k]| = \sum_{k \in \mathbb{Z}} \sum_{i=1}^{n} |[a_i > k] - [b_i > k]|\),即由 \(a\)\(b\) 的代价等价于对所有 \(k \in \mathbb{Z}\)\(a^k\) 变成 \(b^k\) 的代价和。又由条件 1 可得,\(b\) 合法的必要条件是对所有 \(k \in \mathbb{Z}\), \(b^k\) 合法。所以 \(\sum_{k \in \mathbb{Z}} \sum_{i=1}^{n} |[a_i > k] - [b_i > k]| \ge \sum_{k \in \mathbb{Z}} f(a^k)\),即这是答案的一个下界。

  2. 能取到下界:记 \(g^k\) 表示 \(a^k\) 变成满足条件 \(A\) 代价最小的一个 01 串。下界能取到等价于存在一个 \(b\) 序列, 使得 \(\forall k \in \mathbb{Z}, b^k = g^k\),而这等价于随着 \(k\) 的减少,\(\forall i \in [1,n]\)\(g^k_i\) 不升,即每个位置恰好一次从 \(0\) 变成 \(1\)。下面是构造性证明。将问题建模成最小割问题。将 \(g^k_i\) 抽象成点 \(i\),用源点和汇点分别表示选 \(1\) 和选 \(0\)。如果 \(a^k_i = 1\),将源点 \(s\) 向点 \(i\) 连容量为 \(1\) 的单向边;如果 \(a^k_i = 0\),将点 \(i\) 向汇点 \(t\) 连容量为 \(1\) 的单向边。对于条件 \(A\) 中所有偏序关系 \(a_i \le a_j\),将点 \(i\) 向点 \(j\) 连容量为正无穷的边。那么 \(f(a^k)\) 就等于该网络的最小割,并且对于最小割 \((S,T)\),如果点 \(i \in S\), 那么 \(g^k_i = 1\),否则 \(g^k_i = 0\)。随着 \(k\) 的减小,输入 \(a^k\) 满足 \(\forall i \in [1,n]\)\(a^k_i\)\(1\) 变成 \(0\) 恰好一次。所以每次 \(k\) 减小 \(1\),相当于将一些边 \((v,t,1)\),修改成 \((s,v,1)\),感性理解这只会使得 \(S\) 不断扩大,所以随着 \(k\) 的减小,每个点 \(i\) 恰好从 \(T\) 中归为 \(S\) 一次,每个 \(a^k_i\) 恰好从 \(0\) 变成 \(1\) 一次,对于下界的所有 \(g^k\),必然能找到一个对应的 \(b\),证毕。其中关于随着 \(k\) 的减小,\(S\) 只可能扩大的证明将在文末给出。

例题

P12667 [KOI 2023 Round 2] 傻瓜锁

补充

其实条件 \(2\) 不一定得是 \(|x-y|\),只要代价能够表示成 \(f(a) = \bigoplus_k f(a^k)\) 即可,其中 \(\oplus\) 是一种运算。

比如在 cjw 学长提供的例题中,\(\oplus\) 就是 \(\max\),而 \(f(a)\) 表示将 \(a\) 通过题目给定的排序方式重排有序的最小代价,满足条件 \(2\)。显然不降是偏序限制,所以这也满足条件 \(1\)

补充证明

我们要证明:对于一个网络,每次将一条边 \(c(v,t)\) 修改成 \((s,v)\),得到的新最大源集 \(S'\),和原本的最大源集 \(S\),满足关系 \(S \subseteq S'\),其中最大源集的含义是:对于一个网络的所有最小割 \((S,T)\) 中,\(|S|\) 最大的 \(S\)

\(f(u,v)\) 表示边 \((u,v)\) 的容量,\(c(u,v)\) 表示边 \((u,v)\) 的流量,\(c_f(u,v) = f(u,v)-c(u,v)\) 表示边 \((u,v)\) 的剩余容量。

引理 \(1\):对于两个最小割 \((S,T)\)\((S',T')\),可以推出 \((S \cup S',T \cap T')\)

证明:

http://www.jsqmd.com/news/715925/

相关文章:

  • 暗黑2重制版多开神器:5分钟掌握智能账户管理终极技巧
  • 移动端安全编码规范
  • 用群晖部署OmniBox+pansou:把分散的影视资源全聚合到一个界面里
  • VASP+ZEN 实现 DFT+DMFT 计算教程示例
  • CL6291输出2A高效率升压DC/DC
  • Windows和Office一键激活终极指南:KMS_VL_ALL_AIO免费解决方案
  • 软件测试——Postman Script脚本功能
  • 别再拍错了!小二寸照片的尺寸是多少一次性说清
  • 别再让AI模型‘学新忘旧’了:手把手教你用PyTorch搞定Continual Learning的灾难性遗忘
  • 从CANopen到Powerlink:一文搞懂工业以太网协议栈迁移的实战要点
  • HD钱包--BIP44 - 若
  • 网盘下载新思路:用脚本解放你的下载自由
  • GESP2025年6月认证C++五级( 第一部分选择题(1-8))
  • GHelper终极指南:5分钟快速掌握华硕笔记本性能优化神器
  • LiveTalking:如何实现实时交互式数字人的音视频同步技术突破?
  • 赛恩科仪OE1022D双通道锁相放大器测量霍尔效应
  • 2026年,明星偏爱老爹鞋,背后有何秘密?
  • B站评论爬虫实战指南:从零开始获取完整评论数据
  • VxWorks6.9 SMP性能调优笔记:避免多核任务调度中的‘伪并发’与锁竞争
  • GESP2025年6月认证C++五级( 第一部分选择题(9-15))
  • 20260428 紫题训练
  • 3步掌握Bilibili评论数据采集:从零到精通的完整指南
  • 太原风电设备运输
  • [笔记] abc454_e LRUD Moving
  • 我发现了一个很好用的 AI 编程 Skill:/grill-me
  • 向量引擎、GPT Image 2、deepseek v4、api、key 全都讲明白了:这届AI开发,真不是只会调用就够了
  • 不止于T+0:用通达信自定义公式,打造你的手机短线交易‘驾驶舱’
  • Rocky Linux 9上配置Chrony时间同步的保姆级教程(含阿里云、腾讯云NTP源)
  • 给硬件新手的LPDDR4上电初始化避坑指南:从Vdd上电顺序到CKE使能的关键时序
  • 多商户电商系统