Cod sursa(job #2233142)

Utilizator Stefan_RaduStefan Radu Stefan_Radu Data 22 august 2018 13:48:26
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
// By Stefan Radu

#include <fstream>
#include <vector>

using namespace std;

typedef unsigned long long ull;

ifstream cin ("podm.in");
ofstream cout ("podm.out");

const ull INF = (1ull << 63) - 1;

int main () {

  int n;
  cin >> n;

  vector < int > d (n + 1);

  for (auto &x : d) {
    cin >> x;
  }

  vector < vector < ull > > dp (n + 1, vector < ull > (n + 1));

  for (int i = 2; i <= n; ++ i) {
    dp[i - 1][i] = d[i - 2] * d[i - 1] * d[i];
  }

  for (int len = 2; len < n; ++ len) {
    for (int i = 1; i + len <= n; ++ i) {

      dp[i][i + len] = INF;
      for (int mij = i; mij < i + len; ++ mij) {
        dp[i][i + len] = min (dp[i][i + len], dp[i][mij] + dp[mij + 1][i + len] + 1ull * d[i - 1] * d[mij] * d[i + len]);
      }
    }
  }

  cout << dp[1][n] << '\n';
}