Cod sursa(job #1106208)

Utilizator fhandreiAndrei Hareza fhandrei Data 12 februarie 2014 17:21:04
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
// Include
#include <fstream>
using namespace std;

// Constante
const int sz = 501;
const int oo = (1<<30)-1;

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

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

int num;
int sizes[sz];
int memoize[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;
}

int sum(int left, int right)
{
	if(left == right)
		return 0;
	
	if(memoize[left][right])
		return memoize[left][right];
	
	if(right - left == 1)
		return memoize[left][right] = sizes[left-1] * sizes[left] * sizes[right];
	
	int minVal = oo;
	
	for(int mid=left ; mid<right ; ++mid)
		minVal = min(minVal, sizes[left-1] * sizes[mid] * sizes[right] + sum(left, mid) + sum(mid+1, right));
	
	return memoize[left][right] = minVal;
}