Cod sursa(job #1094425)

Utilizator alex03mihaimihai alexandru alex03mihai Data 29 ianuarie 2014 14:08:39
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define NMAX 504
#define INFINIT 100000000000000000LL

using namespace std;

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

void citire();
void pd();
void afisare();

int n;
long long int d[NMAX];
long long int nrmin[NMAX][NMAX];
int main()
{
	citire();
	pd();
	afisare();
	return 0;
}

void citire()
{
	int i;
	fin >> n;
	for (i = 0; i <= n; i ++)
		fin >> d[i];
}

void pd()
{//initializari
	int i, j, x;
	long long int k, kmin, minim;
	// doua matrice
	for (i = 1; i < n; i ++)
		nrmin[i][i+1] = d[i-1] * d[i] * d[i+1];
	// calculez pt x matrice x = 3, n
	for (x = 3; x <= n; x ++)
		for (i = 1; i <= n-x+1; i ++)
		// x matrice incepand de la poz i Ai ... Ai+x-1
		{
			j = i + x - 1;
			minim = INFINIT;
			for (k = i; k < j; k ++)
				if (minim > nrmin[i][k] + nrmin[k+1][j] + d[i-1] * d[k] * d[j])
				{
					minim = nrmin[i][k] + nrmin[k+1][j] + d[i-1] * d[k] * d[j];
					kmin = k;
				}
			nrmin[i][j] = minim;
			nrmin[j][i] = kmin;
		}
}

void afisare()
{
	fout << nrmin[1][n] << '\n';
}