Cod sursa(job #823967)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 25 noiembrie 2012 19:25:52
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>

using namespace std;

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

typedef long long LL;
const LL INF = (1LL << 60) - 1;
const int MAXN = 505;

int A[MAXN];
LL Best[MAXN][MAXN];

inline LL _min (LL A, LL B)
{
	if (A < B)
		return A;
	
	return B;
}

int main ()
{
	int N, i, j, k, x;
	LL v;
	
	in >> N;
	
	for (i = 0; i <= N; i ++)
		in >> A[i];
	
	for (i = 1; i < N; i ++)
		Best[i][i + 1] = A[i - 1] * A[i] * A[i + 1];
	
	for (i = 2; i < N; i ++)
		for (j = 1; j <= N - i; j ++){
			x = i + j;
			Best[j][x] = INF;
			v = (LL) A[j - 1] * A[x];
			for (k = j; k < x; k ++)
				Best[j][x] = _min (Best[j][x], Best[j][k] + Best[k + 1][x] +  (LL) v * A[k]);
		}
		
	out << Best[1][N];
	
	return 0;
}