Cod sursa(job #870744)

Utilizator GagosGagos Radu Vasile Gagos Data 3 februarie 2013 21:00:31
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

#define INF   100000000000000000LL

using namespace std;

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

  in >> n;

  ary = new long long[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 d = 2; d < n; ++d) {
   for (int i = 1; i <= n - i; ++i) {
      matr[i][i + d] = INF;

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

        if (part < matr[i][i + d]) {
          matr[i][i + d] = part;
        }
      }
    }
  }
  
  out << matr[1][n];

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

  return 0;
}