感觉这个比 dxm 论文的做法简单很多啊(
orz EI,orz uyom!
设所有操作构成的集族为 I,我们要做的实际上是为每一个操作赋一个权值,代表其被执行的次数,即 min∑S∈IxS,s.t.∑S∋ixS≤ai(si)−∑S∋ixS≤−ai(ti)xS≥0
做对偶,有 maxn∑i=1ai(si−ti),s.t.∑i∈S(si−ti)≤1(xS)si,ti≥0
我们令 bi=si−ti,那么限制就变成了比较优美的形式。
考虑直接进行 DP,设状态 fi,x,y,z 表示考虑到 i,以 i 为右端点的三类操作的 bi 之和的最大值分别为 x,y,z 时,∑ij=1ajbj 的最大值。
看起来状态数是爆炸的?
首先,注意到在这个问题中,虽然约束并非全幺模矩阵,但是容易发现最优解应当为整数(如果不为整数显然存在某种调整为整数的不劣解,感性上感觉可以归纳证明)。
最优解为整数,则状态可以仅保留 x,y,z∈{0,1},也即每个时刻对 0 取 max,易知这样并不会丢失合法解。
既然状态只需要保留 {0,1},那么 bi 的取值也只需要考虑 {−1,0,1}。这同样是显然的。
时间复杂度 O(∑n),常数不用管(
代码:
1 |
|