Cod sursa(job #2663185)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 25 octombrie 2020 15:44:28
Problema Parantezare optima de matrici Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <algorithm>

const int NMAX = 5e2;
const int64_t INF = 1e16;

int n;
int64_t v[1 + NMAX];
int64_t dp[1 + NMAX][1 + NMAX];

void read() {
  std::ifstream in("podm.in");

  in >> n;
  for (int i = 1; i <= n + 1; ++i)
    in >> v[i];
}

int main() {
  read();

  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j)
      dp[i][j] = INF;
    dp[i][i] = 0;
  }

/*
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      for (int k = i; k <= j - 1; ++k)
        dp[i][j] = std::min(dp[i][j], dp[i][k] + v[i] * v[k + 1] * v[j + 1] + dp[k + 1][j]);
    }
  }
//*/

  for (int len = 2; len <= n; ++len) {
    for (int i = 1; i <= n - len + 1; ++i) {
      int j = i + len - 1;
      for (int k = i; k <= j - 1; ++k)
        dp[i][j] = std::min(dp[i][j], dp[i][k] + v[i] * v[k + 1] * v[j + 1] + dp[k + 1][j]);
    }
  }
/*
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j)
      std::cout << (dp[i][j] == INF ? "inf" : std::to_string(dp[i][j])) << ' ';
    std::cout << '\n';
  }
//*/

  std::ofstream out("podm.out");
  out << dp[1][n];

  return 0;
}