func minFallingPathSum(matrix [][]int) int {
n, m := len(matrix), len(matrix[0])
f := make([][]int, n)
for i := 0; i < n; i ++ {
f[i] = make([]int, m + 2)
for j := 0; j <= m + 1; j ++ {
f[i][j] = 0x3f3f3f3f
}
}
for i := 1; i <= m; i ++ {
f[0][i] = matrix[0][i - 1]
}
for i := 1; i < n; i ++ {
for j := 1; j <= m; j ++ {
f[i][j] = min(f[i - 1][j], f[i - 1][j - 1],f[i - 1][j + 1]) + matrix[i][j - 1]
}
}
ans := 0x3f3f3f3f
for i := 1; i <= m; i ++ {
ans = min(f[n - 1][i], ans)
}
return ans
}