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