Cod sursa(job #3150570)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 17 septembrie 2023 13:21:33
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <vector>

constexpr long long get_inf() {
  const int NMAX = 500;
  const int DIM = 10000;
  return 1ll * NMAX * DIM * DIM * DIM;
}

int main() {
  std::ifstream cin("podm.in");
  std::ofstream cout("podm.out");

  constexpr long long inf = get_inf();

  int n;
  cin >> n;

  std::vector<int> v(n + 1, 0);
  for (int i = 0; i <= n; i++)
    cin >> v[i];

  std::vector<std::vector<long long>> dp(n, std::vector<long long>(n, 0));
  for (int dif = 1; dif < n; dif++) {
    for (int left = 0; left + dif < n; left++) {
      int right = left + dif;

      dp[left][right] = inf;
      for (int k = left; k < right; k++) {
        dp[left][right] = std::min(dp[left][right],
                                   dp[left][k] + dp[k + 1][right] +
                                       1ll * v[left] * v[k + 1] * v[right + 1]);
      }
    }
  }

  cout << dp[0][n - 1] << '\n';
  return 0;
}