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
-
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つの一時
-
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