Examples

浅谈线性规划

以前学了很多次都没学明白,今天再来看看。

本文不会涉及单纯形法的知识点讲解,大部分题目侧重于线性规划对偶。

同样本文不会涉及相关知识点的证明,或是线性规划解的整数性说明,毕竟这只是一个总结性的文章。

拉格朗日对偶部分没学会,暂鸽。


线性规划标准型

对于任意线性规划,容易通过简单的变形使其变为以下形式(无限制的变量拆为两个非负变量作差):

maxcTxAxbx0

两个变量的线性规划:每条限制对应一个半平面,会交出一个不一定封闭的平面凸形,而最值可以看作最大化某直线纵截距,凸包二分即可。

整数线性规划

其要求自变量取到整数,这是 NP-hard 问题。不过很多情况下,我们遇到的线性规划问题都有整数最优解。

全幺模矩阵

若矩阵 A 满足任意子式值均为 {1,0,1},我们称其全幺模矩阵。

在 OI 中,一个充分的判定方法是:系数在 {1,0,1} 内,每列至多两个非零位置,且若某列有两个非零位置,将对应行连边,得到的图是二分图。

若约束为全幺模矩阵,整数线性规划可以看作普通线性规划求解。

任何最大流、最小费用最大流的线性规划都是全幺模矩阵。

标准型的对偶

我们定义一标准型线性规划的对偶为:

minyTbATycy0

AB 的对偶,那么 B 一定是 A 的对偶,称两者互为对偶。

对于某取等的限制,其改写成标准型后对偶会产生两个变量 y1,y2,我们需要最小化 b(y1y2)y1y2 可以写成一无限制变量 y(即可以小于 0)。因此取等的限制与无限制变量之间是对偶关系,这样推对偶会更方便。

强对偶定理

我们不加证明地指出——

对于线性规划 P,假设其对偶形式为 D,以下有且仅有一条成立:

  • P,D 均有最优解且最优解相等;
  • P,D 均无最优解;
  • 仅有一者有可行解,且有可行解的目标函数在约束下无界。

互补松弛定理

对于一组对偶线性规划 P,Dx,y 分别为 P,D 最优解等价于以下两者同时成立:

  • xi>0D 中对应的限制是紧的;
  • yi>0P 中对应的限制是紧的。

(事实上反向也成立)

简证:我们令松弛变量 xs=bAx,ys=ATyc,根据强对偶定理有:

yTAx+yTxs=yTb=cTx=yTAxysTxyTxs+ysTx=0

如何还原方案

根据前文提到的互补松弛定理,我们若求出对偶定理的最优解,讨论每个变量是否为零,这样就能对应到原问题某个限制是否紧。

若原问题形式较好,我们通过某种方法还原了方案,此时根据互补松弛定理,任意合法解均为最优解。

一些模型

最短路模型:

maxdtdsdydx+cx,y((x,y)E)

最大流模型:(为了方便,我们加入边 (t,s),流量为 ,因此可以要求源汇也满足流量守恒)

maxft,s0fx,ycx,y((x,y)E)(x,i)Efx,i=(j,x)Efj,x

最小费用流模型:

minwx,yfx,y0fx,ycx,y((x,y)E)(x,i)Efx,i=(j,x)Efj,x

市面上的形式都引入了 bx 这一变量表示 x 的出流量减入流量(可以看作一条连接源或汇的边),在这也记录一下:

minwx,yfx,y0fx,ycx,y((x,y)E)(j,x)Efj,x(x,i)Efx,i=bx

一些对偶

最小费用流模型的对偶:

zx,y 为第一个限制的对偶变量,px 为第二个限制的对偶变量:

maxbxpx(x,y)Ecx,yzx,ypypxzx,ywx,y((x,y)E)zx,y0((x,y)E)px0

消去 zx,y,整理得:

minbxpx+(x,y)Ecx,ymax(0,pypxwx,y)

最大费用循环流模型的对偶:

我们先写出最大费用循环流的线性规划

max(x,y)Ewx,yfx,y0fx,ycx,y((x,y)E)(x,i)Efx,i=(j,x)Efj,x

对偶得:

min(x,y)Ecx,yzx,ypxpy+zx,ywx,yzx,y0

同样地消去 zx,y,整理得:

min(x,y)Ecx,ymax(0,pypx+wx,y)

其等价于上面最小费用流添加汇点到源点的边后令所有 bi=0,且令 wx,ywx,y 的结果,与我们的认知相吻合。

根据对偶的结果,我们可以得知若题目所求为这些结果的式子,可以对偶,并使用费用流/最大费用循环流解决。

一些例题

以下的例题若不特殊说明,默认变量非负。

① P3337 [ZJOI2013] 防守战线

令变量 pi 表示 [1,i] 建的塔数量,写出线性规划:

minipi(CiCi+1)pi+1pi0pRipLi1Di

改写目标函数为:

minipi(CiCi+1)+imax(0,pi+1+pi)+imax(0,pRi+pLi1+Di)

使用上面的最小费用流模型解决。

② P3980 [NOI2008] 志愿者招募

写出线性规划:

minicixiljirjxjai

对偶得到:

maxiaiyii=ljrjyicj

不过到了这一步好像只能单纯形?

也可以作前缀和变为上一题的形式然后再对偶,不过这应该是等价于直接做费用流的。

③ ABC224H Security Camera 2

写出线性规划:

minaixi+biyixi+yjci,j((i,j)E)

对偶得到:

max(i,j)Eci,jzi,j(u,i)Ecu,iau(i,v)Eci,vbv

经典的二分图最大费用流模型。

④ CF671D Roads in Yusland

首先有一种不需要线性规划的方法,也提一下:

fx 为覆盖了 x 子树与其父边的方案数,但 f 之间无法直接转移。我们 dfs 整棵树,对于每棵子树维护出很多 (c,t) 表示覆盖完这棵树后继续向上覆盖 t 步,最小代价是 c

对于 yson(x),考察 y 的二元组 (c,t) 转移到 x,其产生的贡献是 c+zson(x),zyfz,于是我们可以使用支持全局减,合并,维护最大值的左偏树来维护所有方案,复杂度 O(nlogn)

写出线性规划:

mincizi(xj,yj)izj1

对偶得到:

maxpii(xj,yj)picj

这就是经典的贪心了,要维护每条链被覆盖的次数,每个点贪心地减,同样使用左偏树做到 O(nlogn)

⑤ HDU6974 Destinations

注意到问题可以被改写成:有 3m 条链,选择 m 条链使得互不相交(因为同一起点的路径两两相交),同时容易发现 m 是上界,我们将权值改为 infvi,即选择若干条不交链,最大化权值和。

写出线性规划:

maxcizi(xj,yj)izj1

对偶得到:

minpii(xj,yj)picj

这是经典的树上延迟贪心,我们 dfs 整棵树,在 lca 处考察路径,若点权和不够就补上来,树状数组维护,复杂度 O(nlogn)

⑥ P7246 手势密码

写出线性规划:

minu,vzu,v(u,v)izu,v=ai

对偶得到:

maxaipii(u,v)pi1

其中 pi 无正负限制。

于是直接令 fx,0/1 表示从 x 子树出发,权值和最大的路径值为 0/1 的最大答案,容易发现 pi 只会取 {1,0,1},复杂度 O(n)

⑦ P6631 [ZJOI2020] 序列

dxm 论文推法好像麻烦了点,类似上一题,我们有一个更简单的推法(其中 S 为操作构成的集族):

minTSxTTixT=ai

对偶得到:

maxaipiiTpi1

类似上一题地列出 dp,记录三类操作对应最大后缀和即可,容易发现值域 {0,1},复杂度 O(n)

⑧ XX Open Cup GP of Moscow C Circles

写出线性规划:

maxxixi+ximodn+1si

对偶得到:

minsiyiyi+yimodn+11

事实上可以证明,除了全为 0.5 的情况,其余时候均满足 yi{0,1},于是从前往后 dp 一下即可,环的限制不难拆,复杂度 O(n)

⑨ CF1696G Fishingprince Plays With Array Again

写出线性规划:

minxi+yiXxi+Yxi1+Yyi+Xyi1aix0=y0=xn=yn=0

我们发现第三行限制事实上是没有必要的,因为这些操作都可以找到对应不劣的合法操作代替。

对偶得到:

maxaiziXzi+Yzi+11Yzi+Xzi+11

不妨设 XY,事实上可以证明,zi 的取值只有 {0,1X+Y,1Y},于是使用线段树维护矩阵乘法维护即可,复杂度 O(qlogn)

⑩ P4642 [BJWC2008] 方程

线性规划式子在题面里就不列出来了,直接写出对偶形式:

minz1s+z2taiz1+biz2ci

这里的 z1,z2 无正负限制,于是预处理半平面交,询问在凸包上二分即可,复杂度 O((n+q)logn)

⑪ CODECHEF Chefbook

写出线性规划:

maxpioutiqiinisx,ywx,y+pxqytx,y((x,y)E)

wx,y 的影响消去,对偶得到:

min(x,y)Esx,yfx,y+tx,ygx,y(x,i)Efx,i+(i,x)Egi,xoutx(x,i)Efx,i(i,x)Egi,xinx

容易转成前面提到的最小费用流模型,而这题还要求构造方案,使用前文提到的还原方法,问题变为了差分约束,任跑一组解即可。

⑫ bzoj3118 orz the mst

对于每条非树边,其限制为权值大于等于路径上所有边,容易写出:

mineTbexe+eTaexexe+wewixi(iPe,eT)

对偶得到:

maxiPe,eT(wiwe)ye,iiPeye,iae(eT)Peiye,ibi(iT)

暴力连边,经典的二分图费用流模型。

⑬ P4412 [SHOI2004] 最小生成树

上一题的子问题。

⑭ CF1765J Hero to Zero

先证明一个经典结论:在一张带权二分图中,最大带权匹配的权值和恰好为最小顶标和。

写出最大带权匹配的线性规划:

max(x,y)Ewx,yzx,y(x,i)Ezx,i1(xL)(i,x)Ezi,x1(xR)

对偶得到:

miniLpi+iRqipx+qywx,y((x,y)E)

证毕。此时再回顾 ⑫,其无非是将最小顶标和对偶成了最大带权匹配问题。

回到这个问题,我们直接设 xi,yj 分别表示某一行/列操作数量,写出线性规划:

minxi+yi+i,j(ci,jxiyj)=ci,j(n1)(xi+yi)xi+yjci,j

这就是最小顶标和模型,对偶成最大匹配后容易使用贪心解决,复杂度 O(nlogn)

⑮ 2022 集训队互测 Round 7 B 卑鄙的下毒人

令原材料毒药数量前缀和为 qi,写出线性规划:

mink(qnq0)+imax(0,ai(bRibLi1))qiqi+1

式子很类似最大循环流模型,将 qiqi+1 带上 的权值写入目标函数中,直接应用上面的式子得到建图:

  • (0,n,k,0)
  • (Ri,Li1,1,ai)
  • (i+1,i,,0)

我们可以去除 (0,n) 的边变为有源汇最大费用流,取负变成最小费用流,由于有负权,我们需使用原始对偶求解。第一轮的势能计算也可以不使用 spfa,因为此时图为 dag 可以直接递推。

⑯ CF1307G Cow and Exercise

写出线性规划:

maxznz1zyzx+cx,y+wx,y((x,y)E)(x,y)Ewx,yC

对偶得到(注意 z 是不限制正负的变量,对偶后是取等的限制):

min(x,y)Ecx,yfx,y+Cg(x,i)Efx,i(i,x)Efi,x={1x=11x=n0otherwisefx,y+g0

其很类似最小费用流模型,稍微变形得到:

min((x,y)Ecx,yfx,y+C)g(x,i)Efx,i(i,x)Efi,x={1gx=11gx=n0otherwisefx,y1

注意到 (x,y)Ecx,yfx,y 为每条边流量在 [0,1] 内的图,流量恰好为 1g 时最小费用流费用大小,即求:

maxmincost of flow(h)+Ch

虽然 h 是任意实数,可以证明对于任意区间 [t,t+1](tZ),最值永远在边界取到。

众所周知,最小费用最大流是凸的,于是记录下每次增广结束后的流量与费用,其不重不漏地构成了凸壳上所有位置,每次询问暴力遍历凸壳即可,复杂度 O(nm2+qm)

⑰ loj#6511. 「雅礼集训 2018 Day8」B

二分答案,我们考虑最小化支出,写出线性规划:

mincizidydx+wyzy((x,y)E)dimid

消去 zi 可以发现这是最大费用循环流模型。

⑱ CF375E Red and Black Tree

有树形背包做法,这里仅讨论对偶做法,写出线性规划:

min(1ci)zidis(x,i)Xzi1zi=m

容易发现不会有 zi1,对偶变为标准型,使用单纯型法解决。

⑲ 2021 集训队互测 Round 4 B 机器

🕊。

⑳ P8182 「EZEC-11」雪的魔法

🕊。


参考资料:

posted @   xiaoziyao  阅读(999)  评论(10编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示