Cod sursa(job #404250)

Utilizator TabaraTabara Mihai Tabara Data 25 februarie 2010 22:35:52
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
using namespace std;

const char* in = "podm.in";
const char* out = "podm.out";
const int NMAX = 505;
const long INF = 2000000000;

long M[NMAX][NMAX];
long P[NMAX];
int N;

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

	scanf ( "%d", &N );

	int i, l, k, j;

	for ( i = 0; i <= N; scanf ( "%ld", P+i++ ) );

	for ( i = 1; i <= N; ++i ) M[i][i] = 0;

	for ( l = 2; l <= N; ++l )
	{
		for ( i = 1; i <= N-l+1; ++i )
		{
			j = i+l-1;
			M[i][j] = INF;
			for ( k = i; k <= j-1; ++k )
			{
				long Q = M[i][j];
				Q -= M[i][k] + M[k+1][j] + P[i-1] * P[k] * P[j];
				if ( Q > 0 )
					M[i][j] = M[i][k] + M[k+1][j] + P[i-1] * P[k] * P[j];
			}
		}
	}

	printf ( "%ld\n", M[1][N] );
	return 0;
}