C++ 中的三角形
假设我们有一个三角形。我们需要找到从上到下的最小路径和。每一步,我们都可以移动到下方行中相邻的数字。
例如,如果以下三角形是这样:
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
从上到下的最小路径和为 11(2 + 3 + 5 + 1 = 11)。
让我们看看步骤 −
创建一个表用于动态规划方法。
n := 三角形的尺寸
对于 i := n – 2 到 0
对于 j := 0 到 i
dp[j] := triangle[i, j] + dp[j] 和 dp[j + 1] 两者之间的最小值
返回 dp[0]
示例 (C++)
让我们看看以下实现,以更好地理解 −
#include <bits/stdc++.h> using namespace std; class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { vector <int> dp(triangle.back()); int n = triangle.size(); for(int i = n - 2; i >= 0; i--){ for(int j = 0; j <= i; j++){ dp[j] = triangle[i][j] + min(dp[j], dp[j + 1]); } } return dp[0]; } }; main(){ Solution ob; vector<vector<int> > v = {{2},{3,4},{6,5,7},{4,1,8,3}}; cout << ob.minimumTotal(v); }
输入
[[2],[3,4],[6,5,7],[4,1,8,3]]
输出
11
广告