想定解はO(1)らしいけれど、それはそれとして自分がDPの計算量を理解できていないことがわかった。
b0=Z,b1=W,b2=a1,...,bN+1=aNと添え字を付け替えた上で、f(i,j)をXがi枚目、Yがj枚目まで取った状況からの最終スコアとする。求めたいのはf(0,1)で、漸化式は
f(i,j)=⎩⎪⎨⎪⎧∣bi−bj∣max(f(j+1,j),...,f(N+1,j))min(f(i,i+1),...,f(i,N+1))(i=N+1 or j=N+1)(i<j)(i>j)
と書ける。状態数がN2だからメモ化で余裕……となんとなく思ってしまってそのまま書いたらTLEした。実際には、それぞれのf(i,j)を求める際にN+1−min(i,j) 回の参照が発生するので、この漸化式のままでは全体の計算量がO(N3)になる。
i<j (i>j)のときi=0,...,j−1 (j=0,...,i−1)のいずれであっても答えが変わらないことを利用して、
f(i,j)=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧∣bi−bj∣f(0,j)max(f(j+1,j),...,f(N+1,j))f(i,0)min(f(i,i+1),...,f(i,N+1))(i=N+1 or j=N+1)(0<i≤j−1)(i=0)(0<j≤i−1)(j=0)
とすればO(N2)になる。めでたしめでたし。
空間計算量と時間計算量を混同してはいけないという当然の話であった。