Cod sursa(job #1126012)

Utilizator superman_01Avramescu Cristian superman_01 Data 26 februarie 2014 20:46:39
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#include <algorithm>
#include <vector>

#define INF (1LL<<60)
#define NMAX 505
#define get_min(a,b) ((a)<(b)?(a):(b))

using namespace std;

ifstream in ( "podm.in" );
ofstream out ( "podm.out" );

int N , D[NMAX];
long long DP[NMAX][NMAX] , dif;

int main ( void )
{
	int i , j , k  ,diff ;
	in >> N ;
	for ( i = 0 ; i <= N ; ++i )
		in >> D[i];
	for ( i = 1 ; i <= N ; ++i )
		DP[i][i+1] = D[i-1]* D[i]*D[i+1];
	for ( diff = 2 ; diff < N ; ++diff )
	      for ( i = 1 ; i +diff <= N ; ++i )
		{
			j = i +diff ;
			DP[i][j] = INF;
			for ( k = i  ; k <=  j ; ++ k )
				DP[i][j] = get_min( DP[i][j] , DP[i][k] + DP[k+1][j] + D[i-1]*D[k]*D[j] );
		}	
		
	out << DP[1][N];
	in.close();
	out.close();
	return 0 ;
}