0%

[还没写完] 线性规划初探

模拟赛感觉考了好几次,受不了了学一下。

与其说是学习笔记可能不如说是抄一遍集训队论文(大雾

前言

哪个傻逼天天往模拟赛塞这东西。

基本介绍

定义

有一组变量 ,以及若干个给定限制,每一组形如

然后你需要求 的最大值/最小值。

标准型

考虑称如下有 个变量和 个条件的线性规划为标准型:

  1. 目标求的是式子 最大值;
  2. 个约束的形式为 ,即只有小于等于号的要求。
  3. 对于每一个变量 ,额外约束

对于一个不是标准型的线性规划:

  1. 若其不满足第一条,求 的最小值,则相当于求 的最大值。
  2. 若其不满足第二条,若出现了大于等于号,也像第一条一样反转一下;出现等于号就拆成一个大于等于和一个小于等于。
  3. 对于一个变量 ,将其拆成两个变量 ,并且要求 ,即可满足第三条。

也就是说,对于任意一个线性规划,我们都能将其转化成标准型。

接下来,我们只需要探讨标准型如何求解。

线性规划对偶

标准型的对偶

上述标准型的对偶为一个有 个变量与 个条件 的线性规划问题:

  1. 求式子 最小值
  2. 个条件为
  3. 额外要求

对偶定理

为什么会存在对偶这么个鬼东西呢,考虑这么一个问题。

现在有两个变量 ,我们现在想求 的最大值,这两个变量需要满足以下三个约束: 那么考虑计算 ,而我们知道 ,所以显然

这样我们就找到了 的一个上界,但显然他还有更紧的上界:

考虑计算 得到 。我们又找到了 的上界

现在回到上面的标准型,我们希望用这种方式,找到答案的一个上界。

如果我们将第 个约束选择了 次,我们会得到公式

显然我们需要有 以及 ,这样我们得到了答案的一个上界

而我们希望这个上界越紧越好,也就是说我们希望最小化

不难发现,这正好就是标准型的对偶形式。

至此我们证明了弱对偶定理:上述标准型的答案小于等于其对偶的答案。

当然还有一个强对偶定理:标准型的答案等于其对偶的答案。不会证。

同时,不难发现,标准型对偶的对偶也是标准型,后面要用。

拉格朗日对偶

我是鸽子谢谢。

最小费用流的线性规划

考虑现在有这么一个费用流模型,特殊的,这里的流为循环流。

这张图里,我们要求点 的流出减去流入为 ,其中 为已知的常量。

并且对于边 ,其有流量限制 和单位代价

其答案显然可以使用最小费用流跑出。

(如果图中可能会凭空出现负环的话,应该需要通过上下界网络流把费用全变成正边处理)。

(我这里的 定义似乎都与原论文相反,可能需要注意)。

那么考虑将这个最小费用流的模型用标准型对偶的形式表达出来,其中边 的流量为

那么我们想要求的是 ,限制为: 分别为上述三种约束的对偶变量,那么可以得到标准型:

,有如下限制: 直接令 ,变成求 ,有限制: 而因为 是正的,所以满足其他变量不变的情况下,显然让 越小越好。

也就是说能得到

现在我们求的相当于是

或者说求 ,这两种问题都可以通过最小费用流来解决。

例题

[ZJOI2013] 防守战线

题意

现在有 个位置,每一个位置上可以建任意多个塔,在第 个位置上每造一个塔都需要 的代价。

现在有 个限制,第 个限制为 这个区间里面至少要有 个塔。

求最少的花费。

题解

考虑设前 个位置总共有 个塔。

那么 上至少有 个塔就相当于

此外因为塔的个数不能是负数,所以有

花费就是 ,我们要让这个数字最小。

将要求的东西和限制写在一起,即求 的最小值。

这显然可以用上面说的最小费用流进行解决。

好那么脑瘫的事情来了,我们好像没有约束

不难发现,如果我们给 全都加上 ,那么方案的权值会变化

所以我们并不需要约束 ,求出来的答案直接就是对的。

提交记录,懒得卡常了。感觉改成原始对偶包能过的。

欸我怎么忘了原始对偶怎么写的,复习一下

原始对偶 yyds

[Aizu2230] How to Create a Good Game

题意

给定一张边权为正的 DAG,现在你可以进行若干次操作,每一次操作可以给一条边边权加上

要求所有操作结束之后点 到点 的最长路长度不变,问最多可以进行多少次操作。

对于每一个点 ,保证存在一条从 且经过 的路径。

题解

设初始时点 到点 最长路长度为 ,结束时点 到点 最长路为

那么我们需要最大化 ,且对于 存在如下限制: 还是前面两个限制与常量有关,不太好弄。

不难发现,若将 中所有值一起 则方案权值不变且第三个条件依然满足。

所以我们直接将前两个条件重写为

列出式子,

显然还是可以用网络流解决,很牛。

提交记录

[Utpc2012] じょうしょうツリー

题意

给定 个点的有根树,第 个点初始有一个点权

每一次可以花费 的代价,给一个点权

现在要让每一个点的点权都严格小于父亲的点权,求最小操作次数。

题解

设最终点权为

则需要最小化

存在限制

不难发现,

那么可以直接写出式子

还是一样,发现前面两个部分只有一个变量,所以考虑引入

式子变为

这样变完之后,相当于每一个点 的代价都变成了 ,即所有点的代价会同时变化一个值。

这样操作显然是没用的,因为我们只要求了 ,所以直接求就是最优解。

但是这个题比较特殊,首先 ,直接网络流大概率是过不去的。

其次,图里面根本没有出现源点和汇点,所以这还是一个循环流。

首先观察这个图长什么样子,首先一共有 一共 个点,然后有三种边:

  1. 对于 有边权为 的边。
  2. 对于 ,有 的边权为 的边。
  3. 对于 ,有 的边权为 的边。

我们需要求出这张图的最小费用循环流。

第一种边的代价很烦,我们直接初始给每一个点点权加上自己的深度,这样第一种边就没有代价了。

不难发现,这相当于需要找出若干对点,其中一对点 的贡献是 ,并且需要满足 的祖先。

现在的目标是让所有点对的贡献之和最小。

那么先考虑,如果整棵树是一条链,怎么做。

不难发现,这其实是一个原题。(大雾

这可以简单的使用模拟费用流解决,只需要用一个堆来维护就好了。

放到树上我们发现直接把堆变成可并堆或者直接启发式合并就对了。

提交记录,超级好写。

[核桃周赛052] 构造

题意

给定一张 个点 条边的有向图,你需要给每一条边赋一个点权 ,满足 ,并且对于每一条边 都有

的最小值,输出最小值并构造方案。

题解

首先如果原图有环肯定无解,否则一定存在解。

先写成线性规划的形式,求的是 的最小值。

对于 有限制

式子是

那么我们直接把图建出来,然后跑费用流就能求出最小值。

问题在于怎么构造方案呢,一般的线性规划式子是并不支持构造方案的。

重新观察我们建出来的图长什么样,为方便起见我们将上面的边全部反向建,那么原图存在两种边:

  1. 对于 ,有 连向 边。
  2. 对于点 ,若 ,则从源点 的边。
  3. 对于点 ,若 ,则从 向汇点 的边。

考虑,若一条网络中的边 有流量,能说明什么。

手玩一下,发现这代表着

(证明的话,不会,但自己手玩一下就能感觉到它很有道理)。

那么我们直接跑一个差分约束就好了。

提交记录

QOJ4213 Circles

题意

给定一个长度为 的非负整数序列

称非负(不一定是整数)序列 是平衡的当且仅当对于每一个 都有

为所有平衡的序列中序列和的最大值。

给定序列 ,对于所有 求出

题解

首先考虑怎么求单组的

先写成线性规划的形式,求

有限制 两个限制。

为第一种限制的对偶变量。

写出对偶形式,求

限制是 以及

那么显然不可能出现 的情况,所以 间的实数。