Cod sursa(job #2290794)

Utilizator ZappaManIosif Adrian-Mihai ZappaMan Data 26 noiembrie 2018 23:46:48
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>
#include <limits>
#include <algorithm>

using namespace std;

typedef long long T;

const int NMAX = 505;
const T DMAX = 10005;

int N;

T D[NMAX];
T m[NMAX][NMAX];

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

   scanf("%d", &N);

   for (int i = 0; i <= N; ++i) {
      scanf("%lld", &D[i]);
   }


   for (int i = 1; i < N; ++i) {
      m[i][i+1] = D[i-1] * D[i] * D[i+1];
   }

   for (int d = 2; d < N; ++d) {
      for (int i = 1; i <= N - d; ++i) {
         m[i][i+d] = numeric_limits<T>::max();
         for (int k = i; k < i + d; ++k) {
            m[i][i+d] = min(m[i][i+d], m[i][k] + m[k+1][i+d] + D[i-1] * D[k] * D[i+d]);
         }
      }
   }

   printf("%lld", m[1][N]);

   fclose(stdin);
   fclose(stdout);
   return 0;
}