def min_path_sum(grid):
    if not grid or not grid[0]:
        return None
    rows, cols = len(grid), len(grid[0])
    dp = [[0] * cols for _ in range(rows)]
    dp[0][0] = grid[0][0]
    for r in range(rows):
        for c in range(cols):
            if r == c == 0:
                continue
            top = dp[r - 1][c] if r else float('inf')
            left = dp[r][c - 1] if c else float('inf')
            dp[r][c] = grid[r][c] + min(top, left)
    return dp[-1][-1]
