#define min(a,b) ((a)<(b))?(a):(b);
int minPathSum(int** grid, int gridSize, int* gridColSize){
    for (int i=gridSize-1; i>=0; i--){
        for (int j=(*gridColSize)-1; j>=0; j--){
            if( i+1>=gridSize && j+1>=*gridColSize )
                continue;
            grid[i][j] += min( (i+1<gridSize)?grid[i+1][j] :2147483647, (j+1<*gridColSize)?grid[i][j+1] :2147483647);
        }
    }
    return **grid;
}