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