有 个 01变量 ,同时有 .
同时有约束条件:用集合 表示,这个 中每一个元素表示一个 的取法。(平时见到的题不咋有约束)
我们要给 赋值,使得 最大,还要满足 的取法 。
先看看这个初始问题怎么解,再看拓展。
定义:
,,目标是求得 。
。定义
重要定理:
,。
如果证明了这个定理,我们就可以得出:
( 与 ) 的大小关系,和 ( 与 ) 的大小关系相同。
定理证明:
把 改成 ,证明过程也还是正确的。证毕。
如此我们就可以二分,然后利用 判断 是否可行。
注意:这里 的作用只是帮助我们判断 是否可行。具体我们要怎么求出 ,就具体问题具体分析。
例题:Earthquake
每个边有两个属性 。选出图中的一些边,构成生成树,使得 最大, 表示此边没选, 表示此边选了。其中 是给定的数。
解:
记 ,
目标是使 最大。
这里的 。当我们二分一个 判断是否可行,就是要判断 是否 ,其中 是所有使得选出的边构成生成树的 的集合。
那么
要 最大, 是常数,所以就是要 最小。
问题变成了:有一些边,可以选或者不选(),每条边有一个属性 ,要求选一些构成生成树(),使得选出的这些边属性之和最小。
这不就是最小生成树吗?我们将每条边的权值赋值为 ,然后跑最小生成树得到最小总和 ,再判断 是否为正即可。
最小圈
老经典了。
最小。
,,这里 是所有构成环的边的选法集合。
我们要 最小,也就是要 ,也就是要选出若干条边构成环使得环的边权和小于 。
这就是 SPFA 判负环。所以我们二分 ,每条边的边权设置为 然后判断是否有负环。若有,答案可以更小;否则,答案更大。
Signtseeing Cows
最大。
,,这里 是所有构成环的选边方案。
要 最大,也就是 ,也就是 。
但是我们只整过负环的啊?大于 怎么弄?
很简单:。
还有最后一问题:一条边的边权要设成 ,那么这个 是跟着哪个端点呢?
注意到原图是有向图(无向图当作两个相反边),我们让每条边的 都跟着出点或者都跟着入点即可。
Hiking
如果你发现用 难以表示出分子/分母,可以尝试直接用 来表示。
例如此题,如果用 的方式,,发现分子不好表示。
所以我们转而用 表示。
。要使其最大。
, 是使得 的所有选法集合。
我们可以用 DP 来求 最大是多少。
表示前 个落脚地,最后一天在第 个落脚地休息的最大 是多少。 做 DP。
判断 的正负即可。
(DP 还原方案不再多说了)
新生舞会
构建01分数规划 “选物品” 的模型。
画一张 的方格表,格子 代表第 个男生与第 个女生配对。我们要从这些格子里面选一些,让这些格子的 最大。
, 是选出一些格子且每行每列恰有 个格子选出的选法集合。
,也就是说我们重新设每个格子的价值 。我们要 尽量大,所以就要 尽量大。
如何二分判定:每个匹配的价值是 ,求二分图带权最大完美匹配。直接上费用流。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!