A,B∈Nが与えられたときの経路は(N−1にたどりつくなら)
0,A,A−B,2A−B,...,kA−(k−1)B(=N−1)
のようになっている。C:=A−BとするとB+kC=N−1が成り立つので、逆にk,Cが与えられるとB=N−1−kC, A=N−1−(k−1)Cとなって経路が決まることになる。f(k,C)をこの経路の最終得点とする。A,B>0⇔kC<N−1だから、kC<N−1を満たすようなO(NlogN)通りのk,Cについてf(k,C)を求めればよい。
fの漸化式について考える。k,Cが与えられたときの経路は
0,N−1−(k−1)C,C,N−1−(k−2)C,2C,...,N−1−C,(k−1)C,N−1
であり、kを1増やすと
0,N−1−kC,C,N−1−(k−1)C,2C,...,N−1−C,kC,N−1
となる。差分を見るとfの漸化式は
f(k+1,C)=f(k,C)+SN−1−kC+SkC
と書けるので、これに従ってDPすればよい。
ただし、同じ位置を2回通ってしまうパターンを除く必要がある。上の経路を観察すると、同じ位置を2回通るのはx,y∈{1,...,k−1}が存在してN−1−xC=yCとなる場合であり、これはz∈{2,3,...,2(k−1)}が存在してN−1=zCが成り立つのと同値である。つまり、CがN−1を割り切り、かつ 2≤(N−1)/C≤2(k−1)である場合を除けばよい。
超えるべきハードルがいくつかあるので、コンテスト中に解けるようになるのは大変そう。