func minFallingPathSum(grid [][]int) int {
n := len(grid)
ans := 0x3f3f3f3f
f := make([][]int, n)
for i := 0; i < n; i ++ {
f[i] = make([]int, n)
}
for i := 0; i < n; i ++ {
f[0][i] = grid[0][i]
}
for i := 1; i < n; i ++ {
for j := 0; j < n; j ++ {
mincost := 0x3f3f3f3f
for k := range grid[i - 1] {
if k != j {
mincost = min(mincost, grid[i][j] + f[i - 1][k])
}
}
f[i][j] = mincost
}
}
for i := 0; i < n; i ++ {
ans = min(ans, f[n - 1][i])
}
return ans
}