Cod sursa(job #632016)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 10 noiembrie 2011 01:17:29
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <iostream>

#define MAX_N 505

using namespace std;

long long dim[MAX_N], mat[MAX_N][MAX_N], n;
long long INF = 4611686018427387904;

void read() {
  scanf("%lld", &n);

  for(int i = 0; i <= n; i ++)
    scanf("%lld", &dim[i]);
}

void solve() {

  for(int i = 1; i < n; i ++)
    mat[i][i + 1] = dim[i -1] * dim[i] * dim[i + 1];

  for(int d = 1; d < n; d ++)
    for(int i = 1; i <= n - d; i ++) {
      mat[i][i + d] = INF;
      for(int k = i; k <= i + d; k ++)
	mat[i][i + d] = min(mat[i][i + d], mat[i][k] + mat[k + 1][i + d] + dim[i -1] *
	      dim[k] * dim[i + d]);
    }
}

int main() {

  freopen("podm.in", "r", stdin);
  freopen("podm.out", "w", stdout);

  read();
  solve();

  printf ("%lld\n", mat[1][n]);

  return 0;
}