Cod sursa(job #435869)

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

long long opt[512][512];

int main() {

	int i, j, k, l, m, N;
	long long cant, col[512], lin[512];

	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];
		}
	}

	// iterez
	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) {
				if ((cant = opt[i][l] + opt[l + 1][j] + lin[i] * col[l] * col[j]) < opt[i][j]) {
					opt[i][j] = cant;
				}
			}
		}
	}

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

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

	return 0;
}