/* You are given an M x N Grid<double> of real numbers.  You want to find a path from the top-left corner of the
 * Grid (position 0, 0) to the bottom-right corner (position M-1, N-1) such that the sum of the numbers on the
 * path is as small as possible.  However, you are only allowed to move rightward and downward.  Write a function
 *
 * double MinPathCost(Grid<double>& costs);
 *
 * That takes in one such Grid and returns the minimum cost of such a path.  Note that the resulting cost might
 * be negative, since the Grid entries may be negative.  Your solution should have the best asymptotic (big-O)
 * runtime that you can achieve, so "try all possible paths and take the best" is not a particularly good solution.
 * If you're very clever, you can solve this problem in time O(MN).
 *
 * Note: Dijsktra's Algorithm will not work here; the costs can be negative.
 */