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

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/stdc++.h>
#define MAX 2
using namespace std;
int getMinSumPath(int matrix[MAX][MAX]) {
   for (int row = MAX - 2; row >= 0; --row) {
      for (int col = 0; col < MAX; ++col) {
         int val = matrix[row + 1][col];
         if (col > 0) {
            val = min(val, matrix[row +1][col - 1]);
         }
         if (col + 1 < MAX) {
            val = min(val, matrix[row +1][col + 1]);
         }
         matrix[row][col] = matrix[row][col] +val;
      }
   }
   int result = INT_MAX;
   for (int i = 0; i < MAX; ++i)
   result = min(result, matrix[0][i]);
   return result;
}
int main() {
   int matrix[MAX][MAX] = {
      {5, 10},
      {25, 15},
   };
   cout << "Minimum sum path = " << getMinSumPath(matrix)
   << endl;
   return 0;
}

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

出力

Minimum sum path = 20

  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++を使用してNを合計として表現するために必要なパリンドロームの最小数。

    問題の説明 数Nが与えられた場合、Nをそれらの合計として表現するために必要な回文数の最小数を見つける必要があります N =15の場合、2つの回文、つまり8と7が必要です。 アルゴリズム 1. Generate all the palindromes up to N in a sorted fashion 2. Find the size of the smallest subset such that its sum is N 例 #include <iostream> #include <vector> #include <climits> #incl