Computer >> Máy Tính >  >> Lập trình >> C ++

Đường dẫn tổng tối thiểu trong một tam giác trong C ++

Tuyên bố vấn đề

Cho một cấu trúc tam giác của các số, hãy tìm tổng đường đi nhỏ nhất từ ​​trên xuống dưới. Mỗi bước, bạn có thể chuyển đến các số liền kề trên hàng bên dưới.

Ví dụ

Nếu đầu vào là -

   5
  7 3
 8 1 2
9 6 4 5

Khi đó tổng tối thiểu là 13 như sau -

5 + 3 + 1 + 4

Thuật toán

  • Sử dụng kỹ thuật ghi nhớ của lập trình động
  • Tạo mảng 1-D để ghi nhớ, cụ thể là ghi nhớ
  • Đối với mỗi hàng K, hãy sử dụng công thức bên dưới -
memorization[i] = min( memorization[i], memorization[i+1])
+ A[k][i];

Ví dụ

#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;
}

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -

Đầu ra

Minimum sum path = 13