问题描述:
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的节点上。
问题分析:
在这里,我们考虑采用动态规划算法。数据只能从上往下走,反过来就是自底向上走和最小。即dp(0,0)即为所。
动态规划的转移方程为:dp(i,j) = min(dp(i+1,j),dp(i+1,j+1)) + triangle(i,j).
运用自底向上的方式进行动态规划编程可得:
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.empty()) return 0;
int n = triangle.size(), m = triangle.back().size();
vector<vector<int>> dp(n+1,vector<int>(m+1,0));
for(int i=n-1;i>=0;i--)
{
for(int j=0;j<triangle[i].size();j++)
dp[i][j] = min(dp[i+1][j],dp[i+1][j+1])+triangle[i][j];
}
return dp[0][0];
}
};