29 lines
786 B
Python
29 lines
786 B
Python
import sys
|
|
|
|
input = sys.stdin.readline
|
|
N, M = map(int, input().split())
|
|
a = [list(map(int, input().split())) for _ in range(N)]
|
|
|
|
INF = sys.maxsize
|
|
delta = [-1, 0, 1] # d=0 left-down, d=1 down, d=2 right-down
|
|
|
|
dp = [[[INF]*3 for _ in range(M)] for _ in range(N)]
|
|
|
|
for j in range(M):
|
|
for d in range(3):
|
|
dp[0][j][d] = a[0][j]
|
|
|
|
for i in range(1, N):
|
|
for j in range(M):
|
|
for d in range(3):
|
|
pj = j - delta[d]
|
|
if 0 <= pj < M:
|
|
best_prev = INF
|
|
for pd in range(3):
|
|
if pd != d:
|
|
best_prev = min(best_prev, dp[i-1][pj][pd])
|
|
dp[i][j][d] = a[i][j] + best_prev
|
|
|
|
ans = min(dp[N-1][j][d] for j in range(M) for d in range(3))
|
|
print(ans)
|