Cod sursa(job #2626777)

Utilizator euyoTukanul euyo Data 8 iunie 2020 12:27:42
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#define LIM 500000000000000LL

long long dp[501][501];
int m[501];

int main() {
  FILE *fin = fopen( "podm.in", "r" );
  FILE *fout = fopen( "podm.out", "w" );
  int n, i, j, k, d;
  long long min;
  
  fscanf( fin, "%d", &n );
  for ( i = 0; i <= n; ++i ) {
	fscanf( fin, "%d", &m[i] );
  }
  for ( i = 1; i < n; ++i ) {
    dp[i][i + 1] = m[i - 1] * m[i] * m[i + 1];
  }
  for ( d = 1; d < n; ++d ) {
	for ( i = 1; i <= n - d; ++i ) {
	  min = LIM;
	  for ( k = i; k < i + d; ++k ) {
        if ( min > dp[i][k] + dp[k + 1][i + d] + m[i - 1] * m[k] * m[i + d] ) {
		  min = dp[i][k] + dp[k + 1][i + d] + m[i - 1] * m[k] * m[i + d];
		}
	  }
	  dp[i][i + d] = min;
	}
  }
  fprintf( fout, "%lld", dp[1][n] );
  fclose( fin );
  fclose( fout );
  return 0;
}