Cod sursa(job #870682)

Utilizator GagosGagos Radu Vasile Gagos Data 3 februarie 2013 20:10:48
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

#define INF   100000000000000000LL

using namespace std;

int main() {
  ifstream in("podm.in");
  ofstream out("podm.out");
  int n;
  int* ary;
  long long** matr;

  in >> n;

  n += 1;
  ary = new int[n + 7];
  matr = new long long*[n + 7];

  for (int i = 0; i < n + 7; ++i) {
    matr[i] = new long long[n + 7];
    matr[i][i] = 0;
  }

  for (int i = 0; i < n; ++i) {
    in >> ary[i];
  }

  for (int i = 1; i < n; ++i) {
    matr[i][i + 1] = ary[i - 1] * ary[i] * ary[i + 1];

    for (int j = i - 2; j >= 1; --j) {
      long long min = INF;

      for (int k = j; k < i; ++k) {
        long long part = matr[j][k] + matr[k + 1][i] + ary[j - 1] * ary[k] * ary[i];

        if (part < min) {
          min = part;
        }
      }

      matr[j][i] = min;
    }
  }
  
  out << matr[1][n - 1];

  in.close();
  out.close();

  return 0;
}