KUPC 2016 H - 壁壁壁壁壁壁壁
位置iからi+1に補強材を移動する量をxiとして制約を書き下す。n=4なら
- A1−x1≥B1
- A2+x1−x2≥B2
- A3+x2−x3≥B3
- A4+x3≥B4
という制約の下で∣x1∣+∣x2∣+∣x3∣+∣x4∣を最小化する問題になっている。
fi(x)をx1,...,xi−1,xi=xまでを決定した際の最小コストとする。slope trick向けに制約を変形すると、
- x1≤A1−B1
- x1≥x2−(A2−B2)
- x2≥x3−(A3−B3)
- x3≥B4−A4
となって、一番上のx1に関する制約を無視するとfiの漸化式が得られる:
- f1(x)=∣x∣
- f2(x)=mint≥x−(A2−B2)f1(t)+∣x∣
- f3(x)=mint≥x−(A3−B3)f2(t)+∣x∣
登場する操作はすべてslope trickで表現できて、答えは凸性により、B4−A4かargminxf3(x)の大きいほうの位置でf3の値を求めると得られる。
制約x1≤A1−B1については、この範囲を超えると高いコストがかかることにして対処したい。x1がA1−B1を1超過することによる利益が高々Cであるとき、f1(x)=∣x∣+Cmax(0,x−(A1−B1))とすればよい。Cの具体的な値としては、制約を1だけ破っている状態を解消するために1つの補強材を端から端へ移動するとN−1のコストがかかるので、N−1でよい。