Cod sursa(job #846838)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 2 ianuarie 2013 21:04:21
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb

#include <cstdio>

const int MAX_SIZE(501);
const long long MAX_VALUE(MAX_SIZE * static_cast<long long>(10000));

int n;
int size [MAX_SIZE];
long long optimal [MAX_SIZE] [MAX_SIZE];

inline void read (void)
{
	std::freopen("podm.in","r",stdin);
	std::scanf("%d",&n);
	for (int *iterator(size + 1), *end(size + n + 1) ; iterator <= end ; ++iterator)
		std::scanf("%d",iterator);
	std::fclose(stdin);
}

inline void print (void)
{
	std::freopen("podm.out","w",stdout);
	std::printf("%lld\n",optimal[1][n]);
	std::fclose(stdout);
}

inline long long min (long long a, long long b)
{
	return (a < b ? a : b);
}

inline void dynamic (void)
{
	int length, i, j, k;
	for (length = 1 ; length < n ; ++length)
		for (i = 1 ; i + length <= n ; ++i)
		{
			j = i + length;
			optimal[i][j] = MAX_VALUE;
			for (k = i ; k < j ; ++k)
				optimal[i][j] = min(optimal[i][j],optimal[i][k] + optimal[k + 1][j] + static_cast<long long>(size[i]) * size[j + 1] * size[k + 1]);
		}
}

int main (void)
{
	read();
	dynamic();
	print();
	return 0;
}