public int MinPathSum(int[][] grid,int n, int m) {
if (n<0||m<0) return int.MaxValue;
if (n==0&&m==0) return grid[0][0];
return grid[n][m]+Math.Min(MinPathSum(grid,n-1,m),MinPathSum(grid,n,m-1));
public static void Main()
var g = new[] {new[] {1,2,3}, new[]{3,2,1}};
Console.WriteLine(MinPathSum(g,1,2));