void minPathSum(int step, vector<vector<int> >& triangle, int index, vector<vector<int> >& minSum) { if (step == triangle.size() - 1) { minSum[step][index] = triangle[step][index]; return; } if (minSum[step+1][index] == INT_MAX) minPathSum(step+1, triangle, index, minSum); if (minSum[step+1][index+1] == INT_MAX) minPathSum(step+1, triangle, index+1, minSum); minSum[step][index] = min(minSum[step+1][index], minSum[step+1][index+1]) + triangle[step][index]; }
int minimumTotal(vector<vector<int>>& triangle) { if (triangle.size() == 0) return 0; vector<vector<int> > minSum; for (int i = 0; i < triangle.size(); ++i) { vector<int> rowSum(triangle[i].size(), INT_MAX); minSum.push_back(rowSum); } minPathSum(0, triangle, 0, minSum); return minSum[0][0]; }
int main() { vector<vector<int> > input; vector<int> tmp; tmp.push_back(9); tmp.push_back(1); tmp.push_back(4); tmp.push_back(8); input.push_back(tmp); std::cout<<minPathSum(input); }
int main(int argc, const char *argv[]) { int a[] = {1,3,1}; int b[] = {1,5,1}; int c[] = {4,2,1}; int *num[3]; num[0] = a; num[1] = b; num[2] = c; int res = minPathSum(num,3,3); printf("%d\n",res); return 0; }
int main() { int m = 3, n =2, i; int **grid = (int **)malloc(sizeof(int *)* m); for (i = 0; i < m; ++i) { grid[i] = (int *)malloc(sizeof(int)* n); grid[i][0] = 1 + i; grid[i][1] = 5 + i; } // construct the test cases here int ans = minPathSum(grid, m, n); printf("%d\n", ans); system("pause"); return 0; }
int main() { int m, n, i; m = n = 3; int **grid = (int **) calloc (m, sizeof(int *)); for (i = 0; i < m; i++) grid[i] = (int *) calloc (n, sizeof(int)); grid[0][0] = 1; grid[0][1] = 2; grid[0][2] = 3; grid[1][0] = 1; grid[1][1] = 2; grid[1][2] = 3; grid[2][0] = 1; grid[2][1] = 2; grid[2][2] = 3; printf("%d\n", minPathSum(grid, m, n)); return 0; }
int main() { std::vector<std::vector<int>> grid { { 1, 0, 5 }, { 2, 3, 1}, { 4, 1, 9} }; for ( size_t i = 0; i < grid.size(); ++i ) { for ( size_t j = 0; j < grid[0].size(); ++j ) { std::cout << grid[i][j] << " "; } std::cout << std::endl; } std::cout << "Min cost for above grid from moving top left to bottom right is " << minPathSum(grid) << std::endl; return 0; }
int main(){ vector<vector<int> > grid; int arr[] = {3,5,1,2,4}; vector<int> nums( arr, arr+ sizeof(arr)/sizeof(int)); grid.push_back(nums); int arr1[] = {3,5,1,2,4}; vector<int> nums1( arr1, arr1+ sizeof(arr1)/sizeof(int)); grid.push_back(nums1); int arr2[] = {3,5,1,2,4}; vector<int> nums2( arr2, arr2+ sizeof(arr2)/sizeof(int)); grid.push_back(nums2); cout<< minPathSum(grid)<<endl; return 0; }
void testMinPathSum(){ vector<vector<int>> grid = {{1,2,3},{1,2,3},{1,2,3}}; int res = minPathSum(grid); printf("%d\n",res); }
int main() { std::vector<std::vector<int>> grid = { {1, 2}, {3, 0} }; assert(minPathSum(grid) == 3); return 0; }