Cod sursa(job #1475740)

Utilizator salam1Florin Salam salam1 Data 24 august 2015 12:14:48
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 505;
const long long INF = (1LL << 62);
int n, A[NMAX];
long long DP[NMAX][NMAX];

void read() {
  scanf("%d", &n);
  for (int i = 1; i <= n + 1; i++)
    scanf("%d", &A[i]);
}

void solve() {  
  for (int i= 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      DP[i][j] = INF;
  for (int i = 1; i < n; i++)
    DP[i][i + 1] = 1LL * A[i] * A[i + 1] * A[i + 2];
  
  for (int k = 3; k <= n; k++) {
    for (int st = 1; st <= n - k + 1; st++) {
      int end = st + k - 1;
      
      for (int i = st; i < end; i++) {
        DP[st][end] = min(DP[st][end], DP[st][i] + DP[i + 1][end] + 1LL * A[st] * A[i + 1] * A[end + 1]);
      }
    }
  }
  
  printf("%lld\n", DP[1][n]);
}

int main() {
  freopen("podm.in", "r", stdin);
  freopen("podm.out", "w", stdout);
  
  read();
  solve();
  return 0;
}