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

更新日期: 2020 年 4 月 28 日

259 次浏览

开启你的职业生涯

通过完成课程获得认证

开始
广告