Cod sursa(job #2027845)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 26 septembrie 2017 19:23:22
Problema Parantezare optima de matrici Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>

#define MAX_N 500

long long v[MAX_N + 1];
long long Solve[MAX_N + 1][MAX_N + 1] ;

long long min (long long a, long long b ) {
  if (a < b )
    return a ;
  return b ;
}

long long solve(int st, int dr) {

  long long op ;
  int i ;

  if ( Solve[st][dr] == 0 ) {
    if ( st + 1 == dr ) {
      Solve[st][dr] = 0 ;
    }
    else {
      op = (long long) 1 << 62 ;
      for ( i = st + 1 ; i < dr ; i++ )
        op = min(op, v[st] * v[i] * v[dr] + solve(st, i) + solve(i, dr)) ;
      Solve[st][dr] = op ;
    }
  }

  return Solve[st][dr] ;

}

int main() {

  FILE *fin, *fout ;
  fin = fopen ("podm.in", "r" ) ;
  fout = fopen ("podm.out", "w" ) ;

  int n, i ;
  long long answer ;

  fscanf (fin, "%d", &n ) ;

  for ( i = 0 ; i <= n ; i++ )
    fscanf (fin, "%lld", &v[i] ) ;

  answer = solve(0, n);

  fprintf(fout, "%lld", answer ) ;

  return 0 ;
}