Cod sursa(job #379873)

Utilizator elmercerAlex Mercer elmercer Data 4 ianuarie 2010 12:23:27
Problema Parantezare optima de matrici Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>

long long n, v[512], cost[512][512], i, j, z;

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("%lld", &n);
	scanf("%lld", &v[0]);
	for (i = 1; i <= n; ++i) {
		scanf("%lld", &v[i]);
	}
	for (i = 1; i <= n; ++i) cost[i][i] = 0;
	for (i = 1; i <  n; ++i) cost[i][i + 1] = v[i - 1] * v[i] * v[i + 1];
	for (i = 2; i < n; ++i) {
		for (j = 1; j <= n - i; ++j) {
			cost[j][i + j] = 200000000000000LL;
			for (z = j; z <= j + i - 1; ++z) {
				cost[j][i + j] = min(cost[j][i + j], cost[j][z] + cost[z + 1][i + j] + v[j - 1] * v[z] * v[i + j]);
			}
		}
	}
	printf("%lld", cost[1][n]);
	return 0;
}