Cod sursa(job #1424227)

Utilizator o_micBianca Costin o_mic Data 23 aprilie 2015 19:05:51
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <iostream>
#include <vector>
#define infinity (1LL << 60)
#define LL long long
#define DN 505
using namespace std;

vector <LL> v;
LL best[DN][DN];

int main() {
  int n, x;
  //freopen("input.txt", "r", stdin);
  ifstream fin("podm.in");
  ofstream fout("podm.out");
  fin >> n;
  for(int i = 0; i < n+1; ++i){
    fin >> x;
    v.push_back(x);
  }
  for(int i = 0; i < n-1; ++i){
    best[i][i+2] = v[i] * v[i+1] * v[i+2];
  }
  for(int lg = 3; lg <= n; ++lg){
    for(int i = 0; i + lg <= n; ++i){
      LL minn = infinity;
      for(int j = i + 1; j <= i + lg - 1; ++j)
        minn = min(minn, best[i][j] + best[j][i+lg] + v[i] * v[j] * v[i+lg]);
      best[i][i+lg] = minn;
    }
  }
  fout << best[0][n];
  return 0;
}