C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の三角形の最小合計パス


問題の説明

数字の三角形の構造が与えられた場合、上から下への最小経路合計を見つけます。各ステップで、下の行の隣接する番号に移動できます。

入力が-

の場合
   5
  7 3
 8 1 2
9 6 4 5

その場合、最小合計は次のように13です-

5 + 3 + 1 + 4

アルゴリズム

  • 動的計画法の暗記手法を使用する
  • 暗記、つまり暗記用の1次元配列を作成します
  • K行ごとに、以下の式を使用します-
memorization[i] = min( memorization[i], memorization[i+1])
+ A[k][i];

#include <bits/stdc++.h>
using namespace std;
int getMinSum(vector<vector<int>> &arr) {
   int memorization[arr.size()];
   int n = arr.size() - 1;
   for (int i = 0; i < arr[n].size(); ++i) {
      memorization[i] = arr[n][i];
   }
   for (int i = arr.size() - 2; i >= 0; --i) {
      for (int j = 0; j < arr[i + 1].size() - 1; ++j) {
         memorization[j] = arr[i][j] +
         min(memorization[j],
         memorization[j + 1]);
      }
   }
   return memorization[0];
}
int main() {
   vector<vector<int>> arr = {
   {5},
   {7, 3},
   {8, 1, 2},
   {9, 6, 4, 5}, };
   cout << "Minimum sum path = " << getMinSum(arr) << endl;
   return 0;
}

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

出力

Minimum sum path = 13

  1. C++でのパス合計III

    各ノードが整数キーを保持する二分木を与えたと仮定します。合計して特定の値になるパスを見つける必要があります。パスはルートからリーフまで開始する必要があります。合計が同じになるパスを見つける必要があります。 ツリーが[5,4,8,11、null、13,4,7,2、null、null、5,1]のようで、合計が22の場合、-になります。 パスは[[5,4,11,2]、[5,8,4,5]]です。 これを解決するには、次の手順に従います- この問題を解決するには、dfs関数を使用します。dfsはわずかに変更されています。これは次のように機能します。この関数は、ルート、合計、および1つの一時

  2. C++のNxNグリッドの最小合計立ち下がりパス

    問題の説明 サイズNxNの整数の行列Aが与えられます。タスクは、Aを通る下降経路の最小合計を見つけることです。 立ち下がりパスは、最初の行の任意の要素で始まり、最後の行で終わります。 次の各行から1つの要素を選択します。次の行の選択肢は、前の行の列と最大で1つ異なる列にある必要があります 例 If N = 2 and matrix is: {    {5, 10},    {25, 15} } then output will be 20 as element 5 and 15 are selected 例 #include <bits/std