ABC 147 E - Balanced Path【Python】
問題はこちら。
ループが80^4 = 4 * 10^7くらいになってpythonじゃ間に合わなかったのでC++で通した。皆の回答を見たらPythonでも結構通してる人がいて、その多くがbit演算を使った高速化を用いていた。自分も使えるようになりたくてbit演算を用いて高速化したpythonコードを書いたので載せておく。
import sys
readline = sys.stdin.readline
readlines = sys.stdin.readlines
def main():
zero = 6400
H, W = map(int, readline().split())
A = [list(map(int, readline().split())) for _ in range(H)]
B = [list(map(int, readline().split())) for _ in range(H)]
dp = [[0] * (W + 1) for _ in range(H + 1)]
dp[1][0] |= 1 << zero
dp[0][1] |= 1 << zero
for h in range(H):
for w in range(W):
d = abs(A[h][w] - B[h][w])
dp[h + 1][w + 1] |= (dp[h + 1][w] << d) | (dp[h + 1][w] >> d)
dp[h + 1][w + 1] |= (dp[h][w + 1] << d) | (dp[h][w + 1] >> d)
last = dp[-1][-1]
ans = zero
i = -zero
while last > 0:
if last & 1:
ans = min(ans, abs(i))
i += 1
last >>= 1
print(ans)
if __name__ == '__main__':
main()
この記事が気に入ったらサポートをしてみませんか?