Cod sursa(job #525135)

Utilizator kyky_papoiPapoi Cecilia kyky_papoi Data 24 ianuarie 2011 12:52:44
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#include<algorithm>
using namespace std;

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

#define DIM 501
#define INF 0x3f3f3f3f
void Read();
void Write();
void PD_mix();

int d[DIM], n;
unsigned long long c[DIM][DIM];


int main()
{
	Read();
	PD_mix();
	Write();
	
	fin.close();
	fout.close();
	
	return 0;
}

void Read()
{
	fin >> n;
	for ( int i = 0; i <= n; ++i )
		fin >> d[i];
	
	for ( int i = 0; i <= n; ++i )
			for ( int j = 0; j <= n; ++j )
				c[i][j] = INF;
}

void PD_mix()
{
	for ( int i = 1; i <= n; ++i )
		c[i][i] = 0;
	
	unsigned long long minim = INF, j;
	for ( int l = 1; l <= n; ++l )
	{
		for ( int i = 1; i <= n-l; ++i )
		{
			minim = INF;
			j = i+l;
			for ( int k = i; k <= j; ++k )
				minim = min ( minim, c[i][k] + c[k+1][j] + d[i-1]*d[j]*d[k] );
			c[i][j] = minim;
		}	
	}
}

void Write()
{
	fout << c[1][n];
}