Cod sursa(job #435862)

Utilizator vlad.maneaVlad Manea vlad.manea Data 7 aprilie 2010 22:07:08
Problema Parantezare optima de matrici Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#define Inf 9223372036854775807LL

int N;
long long col[512], lin[512], opt[512][512];

void read() {

	int i;
	freopen("podm.in", "r", stdin);

	// citesc numarul de matrice
	scanf("%d", &N);

	// citesc dimensiunile matricelor
	for (i = 0; i <= N; ++i) {
		scanf("%lld", &col[i]);
		if (i >= 1) {
			lin[i] = col[i - 1];
		}
	}
}

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

void solve() {

	int k, l, i, j, m;
	long long cant;

	for (k = 2; k <= N; ++k) {
		m = N - k + 1;
		for (i = 1; i <= m; ++i) {
			j = i + k - 1;
			
			// infinit
			opt[i][j] = Inf;

			// incerc matrice mai multe
			for (l = i; l < j; ++l) {
				opt[i][j] = minim(opt[i][j], opt[i][l] + opt[l + 1][j] + lin[i] * col[l] * col[j]);
			}
		}
	}
}

void write() {

	freopen("podm.out", "w", stdout);

	// scriu rezultatul inmultirii
	printf("%lld\n", opt[1][N]);
}

int main() {

	read();
	solve();
	write();

	return 0;
}