きろく

特筆すべき記録のまとめ

AtCoder Beginner Contest 147:E - Balanced Path

問題

https://atcoder.jp/contests/abc147/tasks/abc147_e

解法

dp(i, j, k) := マス (0, 0) から マス (i, j) までのパスで「偏り」が(以上でも以下でもなく)k となるかどうか

という DP を考えると,遷移は (0, 0, |A[0][0] - B[0][0]|) から始めて,

dp(i + 1, j, m1) = true

dp(i + 1, j, m2) = true

dp(i, j + 1, m1) = true

dp(i, j + 1, m2) = true

(ただし,m1 = |k - d|, m2 = k + d)

となる.m1, m2 は「偏り」が小さくなるか大きくなるかの 2 通りを試すことを意味している.答えは dp(H - 1, W - 1, k) が true であるような最小の k になる.「偏り」の最大が 80 * (H + W - 1) となるから,計算量は O(HW * 80(H + W - 1)).

解答

https://atcoder.jp/contests/abc147/submissions/8981134

求めたい解を DP の引数に入れたら解けた.

f:id:babcs2035:20191216215154p:plain