Strorkisのブログ

信憑性については悪しからず

ABC147 E - Balanced Path

問題

E - Balanced Path

コード

Submission #14018954 - AtCoder Beginner Contest 147

解法

左上のマスから右下のマスまで移動した際に、通ったマスに書かれている2つの数の差の絶対値を足すか引くかした値の絶対値を xとすると、 xの最小値を求めたい。

これは、マス (i,j)までに xの値を kにすることができるかというbool値を dp_{ijk}として管理すれば求めることができる。

遷移としては、 dp_{ijk}がtrueの場合、次のマス( dp_{(i+1)j} または  dp_{i(j+1)})は、次のマスに書かれている2つの数の差の絶対値を yとすると、 k + y abs(k - y) abs(y - k)のときtrueとなる。

計算量は、 O(HW(H + W) \cdot max(abs(A_{ij} - B_{ij}))

感想

安定の解説ACではあるが、競プロへのモチベが微妙なので諦め。

Rust勉強中のため、コードは冗長かもしれない。