01 分数规划

n 个 01变量 x1xn,同时有 a1an,b1bn.

同时有约束条件:用集合 S 表示,这个 S 中每一个元素表示一个 x1xn 的取法。(平时见到的题不咋有约束)

我们要给 x1xn 赋值,使得 xiaixibi 最大,还要满足 x1xn 的取法 S


先看看这个初始问题怎么解,再看拓展。

定义:

R(x)=aixibixiR=maxxSR(x),目标是求得 R

Fλ(x)=aixiλbixi。定义 Fλ=maxxSFλ(x)

重要定理:

R>λFλ>0RλFλ0

如果证明了这个定理,我们就可以得出:

Rλ) 的大小关系,和 (Fλ0) 的大小关系相同。

定理证明:

R>λxs,R(x)>λxS,aixi>λbixixS,aixiλbixi>0x,Fλ(x)>0Fλ>0

> 改成 ,证明过程也还是正确的。证毕。

如此我们就可以二分,然后利用 Fλ 判断 R 是否可行。

注意:这里 Fλ(x),Fλ 的作用只是帮助我们判断 R 是否可行。具体我们要怎么求出 Fλ,就具体问题具体分析。


例题:Earthquake

每个边有两个属性 ci,ti。选出图中的一些边,构成生成树,使得 fcixitixi 最大,xi=0 表示此边没选,xi=1 表示此边选了。其中 f 是给定的数。

解:

ans=fcixitixifcixianstixi=0.

目标是使 ans 最大。

这里的 Fλ(x)=fcixiλtixi。当我们二分一个 λ 判断是否可行,就是要判断 Fλ=maxxSFλ(x) 是否 >0,其中 S 是所有使得选出的边构成生成树的 x 的集合。

那么 Fλ(x)=fcixiλtixi=fxi(ciλti).

Fλ(x) 最大,f 是常数,所以就是要 xi(ciλti) 最小。

问题变成了:有一些边,可以选或者不选(xi=0/1),每条边有一个属性 ciλti,要求选一些构成生成树(xS),使得选出的这些边属性之和最小。

这不就是最小生成树吗?我们将每条边的权值赋值为 ciλti,然后跑最小生成树得到最小总和 sum,再判断 fsum 是否为正即可。


最小圈

老经典了。

ans=wixi1xi 最小。

Fλ(x)=xi(wiλ)xS,这里 S 是所有构成环的边的选法集合。

我们要 ans 最小,也就是要 Fλ=minFλ(x)<0,也就是要选出若干条边构成环使得环的边权和小于 0

这就是 SPFA 判负环。所以我们二分 λ,每条边的边权设置为 wiλ 然后判断是否有负环。若有,答案可以更小;否则,答案更大。


Signtseeing Cows

ans=vixieixi 最大。

Fλ(x)=xi(viλei)xS,这里 S 是所有构成环的选边方案。

ans 最大,也就是 Fλ=maxFλ(x)>0,也就是 xi(viλei)>0

但是我们只整过负环的啊?大于 0 怎么弄?

很简单:xi(λeivi)<0

还有最后一问题:一条边的边权要设成 λeivi,那么这个 vi 是跟着哪个端点呢?

注意到原图是有向图(无向图当作两个相反边),我们让每条边的 vi 都跟着出点或者都跟着入点即可。

Hiking

如果你发现用 i=1nxiai 难以表示出分子/分母,可以尝试直接用 i=1cntai 来表示。

例如此题,如果用 i=1n 的方式,ans=?i=1nxibi,发现分子不好表示。

所以我们转而用 ans=i=1cnt|lxi+xi1|i=1cntbi 表示。

Fλ(x)=i=1cnt(|lxi+xi1|λbi)。要使其最大。

xSS 是使得 xcnt=xn 的所有选法集合。

我们可以用 DP 来求 Fλ(x) 最大是多少。

dp[i] 表示前 i 个落脚地,最后一天在第 i 个落脚地休息的最大 i=1cnt(|lxi+xi1|λbi) 是多少。O(n2) 做 DP。

判断 dp[n] 的正负即可。

(DP 还原方案不再多说了)


新生舞会

构建01分数规划 “选物品” 的模型。

画一张 n×n 的方格表,格子 (i,j) 代表第 i 个男生与第 j 个女生配对。我们要从这些格子里面选一些,让这些格子的 aibi 最大。

xSS 是选出一些格子且每行每列恰有 1 个格子选出的选法集合。

Fλ(x)=xi(aiλbi),也就是说我们重新设每个格子的价值 ci=aiλbi。我们要 ans 尽量大,所以就要 Fλ 尽量大。

如何二分判定:每个匹配的价值是 aiλbi,求二分图带权最大完美匹配。直接上费用流。

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