Cod sursa(job #913444)

Utilizator fhandreiAndrei Hareza fhandrei Data 13 martie 2013 15:17:15
Problema Parantezare optima de matrici Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
// Include
#include <fstream>
using namespace std;

// Definitii
#define ll long long
#define current best[left][right]

// Constante
const int sz = 501;
const ll oo = (1LL<<62)-1;

// Functii
ll sum(int left, int right);

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

int num;

ll sizes[sz];
ll best[sz][sz];

// Main
int main()
{
	in >> num;
	for(int i=0 ; i<=num ; ++i)
		in >> sizes[i];

	out << sum(1, num);

	in.close();
	out.close();
	return 0;
}

ll sum(int left, int right)
{
	if(current)
		return current;

	if(right - left == 1)
		return current = sizes[left-1]*sizes[left]*sizes[left+1];

	ll minVal = oo;
	for(int mid=left ; mid<right ; ++mid)
		minVal = min(minVal, sum(left, mid) + sum(mid+1, right) + sizes[left-1]*sizes[mid]*sizes[right]);

	return current = (minVal==oo? 0 : minVal);
}