注意到原题是个整数规划,记所有操作的集合为 I,操作 i 的次数为 xi 化成标准型如下:
min∑i∈Ixis.t. ∑i∋jxi=aj(qj)xi≥0,xi∈Z
注意到我们有几乎充分的理由认定该线性规划的约束矩阵 A 是一个全单模矩阵,故我们去掉 xi∈Z 的限制,做对偶,有
maxn∑i=1aiqis.t. ∀S∈I,∑i∈Sqi≤1
由全单模性,最有整数解存在,考虑操作 {i},有 ai≤1,易证 ai→max(ai,−1) 的替换是合法的,故 ai∈{−1,0,1},动态规划即可,复杂度 O(n)。
记前缀和为 b0...n 即要求
mink(bn−b0)+∑max(0,ai−(bri−bli−1))s.t. ∀i∈[0,n),bi+1≥bi
注意到原题的目标函数和约束都为差分形式,考虑最大费用循环流的对偶:
min∑capemax(0,coste−pu+pv)
建图:
- goal←k(bn−b0):0cap=k−−−−→cost=0n
- goal←max(0,ai−(bri−bli−1)):rcap=1−−−−→cost=ail−1
- constrait:bi+1≥bi:i+1cap=+∞−−−−−→cost=0i
观察图易知答案等价于选择 k 个互不相交的集合,集合内的区间互不相交,最大化权值和。
可以直接贪心算法,又或者去掉 0cap=k−−−−→cost=0n,跑最大费用最大流,第一次增广由于是 DAG,按照拓扑序计算最短路,这之后使用 dijkstra algorithm。复杂度 O(kmlogm)。
很容易利用差分约束将最短路写成线性规划形式:
mindt−dss.t. dv≤du+wuvd≥0
则本题的线性规划形式为
p∗=mindt−dss.t. dv−du−xuv≤wuv(αuv)∑xuv≤x(β)d,x≥0
对偶为
d∗=maxxβ+∑wuvαuvs.t. ∑αiu−∑αui≥0 (i∉{s,t})∑αis−∑αsi≥−1∑αit−∑αti≥1−αuv+β≥0α,β≥0
注意到可以构造 p∗ 的一个最优解 d∗ 满足 ∀i,d∗i≠0,由互补松弛定理有对任意 d∗ 的最优解 (α,β)∗,都有不等式一二三是紧的,则有
d∗=maxα,βxβ+∑wuvαuvs.t. ∑αiu−∑αui=0 (i∉{s,t})∑αis−∑αsi=−1∑αit−∑αti=1β≥αuvα,β≥0
考虑先枚举 β,记 γ=αβ,则有
f(β)=maxγβ(x+∑wuvγuv)s.t. ∑γiu−∑γui=0 (i∉{s,t})∑γis−∑γsi=−1β∑γit−∑γti=1β0≤γuv≤1
记 θ=1β,则有 ∑wuvγuv 为流量刚好为 θ 时的最小费用流的费用大小,即要求
maxθg(θ)=x+[mincost of flow θ]θ
注意到 θ 是实数,但是如果取 θ=v+ϵ(ϵ∈[0,1]),则有在某个区间 [v0,v0+1] 中,记当前未走满的增广路费用为 f,已走满的增广路费用之和为 t,则有
dgdϵ=(x+t+ϵfv0+ϵ)′=(c0+ϵfv0+ϵ)′=v0f−c0(v0+ϵ)2
符号与 ϵ 无关,在区间内单调,故最值总在整数处取到,预处理出流量为整数的费用,查询时取最好的即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?