Cod sursa(job #1015209)

Utilizator superman_01Avramescu Cristian superman_01 Data 24 octombrie 2013 00:31:18
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>

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

using namespace std;

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

long long d[NMAX],DP[NMAX][NMAX];
int N ;

int main ( void  )
{
	int i , diff , j , k ;
	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 -1 ; ++diff )
		for ( i = 1 ; i <= N - diff  ; ++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] << "\n";
	in.close();
	out.close();
	return 0 ; 
}