Cod sursa(job #727065)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 27 martie 2012 18:46:22
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <math.h>

long long a[510][510];
long n, i, v[510], l, k;

inline long long cost(long A, long B, long C) {return 1LL * v[A] * v[C] * v[B];}
inline long long min(long long A, long long B) {if (A < B) return A; return B;}

int main() {
	freopen("podm.in", "r", stdin);
	freopen("podm.out", "w", stdout);
	
	scanf("%ld", &n);
	for (i = 1; i <= n + 1; ++i) scanf("%ld", &v[i]);
	
	for (l = 2; l <= n; ++l) {
		for (i = 1; i <= n - l + 1; ++i) {
			a[i][i + l - 1] = 2000000000;
			for (k = i; k < i + l - 1 ; ++k) {
				long long val = a[i][k] + a[k + 1][i + l - 1];
				val += cost(i, k + 1, i + l );
				a[i][i + l - 1] = min(a[i][i + l - 1], val);
			}
		}
	}
	
	printf("%lld\n", a[1][n ]);
	return 0;
}