位置$i$から$i+1$に補強材を移動する量を$x_i$として制約を書き下す。$n=4$なら
- $A_1-x_1 \ge B_1$
- $A_2 + x_1-x_2 \ge B_2$
- $A_3 + x_2-x_3 \ge B_3$
- $A_4+x_3 \ge B_4$
という制約の下で$|x_1|+|x_2|+|x_3|+|x_4|$を最小化する問題になっている。
$f_i(x)$を$x_1, ..., x_{i-1}, x_i=x$までを決定した際の最小コストとする。slope trick向けに制約を変形すると、
- $x_1 \le A_1-B_1$
- $x_1 \ge x_2-(A_2-B_2)$
- $x_2 \ge x_3-(A_3-B_3)$
- $x_3 \ge B_4-A_4$
となって、一番上の$x_1$に関する制約を無視すると$f_i$の漸化式が得られる:
- $f_1(x) = |x|$
- $f_2(x) = \min_{t \ge x - (A_2-B_2)}f_1(t) + |x|$
- $f_3(x) = \min_{t \ge x - (A_3-B_3)}f_2(t) + |x|$
登場する操作はすべてslope trickで表現できて、答えは凸性により、$B_4-A_4$か$\argmin_xf_3(x)$の大きいほうの位置で$f_3$の値を求めると得られる。
制約$x_1 \le A_1-B_1$については、この範囲を超えると高いコストがかかることにして対処したい。$x_1$が$A_1-B_1$を$1$超過することによる利益が高々$C$であるとき、$f_1(x) = |x| + C\max(0, x-(A_1-B_1))$とすればよい。$C$の具体的な値としては、制約を$1$だけ破っている状態を解消するために1つの補強材を端から端へ移動すると$N-1$のコストがかかるので、$N-1$でよい。