描述
Given a m × n grid filled with non-negative numbers, find a path from top le to boom right which
minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time
Given a m × n grid filled with non-negative numbers, find a path from top le to boom right which
minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time
#include<iostream>
#include<vector>
using namespace std;
int mymin(int a, int b)
{
return a < b ? a : b;
}
int MinPathsum(const vector<vector<int>>&input)
{
if (input.size() < 1)
return 0;
int row = input.size();
int col = input[0].size();
vector<int>sum(input[0].size(), 0);
for (int i = 0; i < col; i++)
{
if (i == 0)
sum[i] = input[0][i];
else
sum[i] = input[0][i] + sum[i - 1];
}
for (int i = 1; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (j == 0)
sum[j] += input[i][j];
else
{
sum[j] = mymin(sum[j - 1] + input[i][j], sum[j] + input[i][j]);
}
}
}
return sum[col - 1];
}
int main()
{
vector<int> vec1 = { 1, 3, 6, 8 };
vector<int> vec2 = { 1, 2, 5, 1 };
vector<int> vec3 = { 1, 1, 2, 3 };
vector<vector<int>> input = { vec1, vec2, vec3 };
int minsum = MinPathsum(input);
cout << minsum << endl;
}