Cod sursa(job #379913)

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

long n, v[512];
long long cost[512][512], sum, INF;

int main() {
	freopen("podm.in", "r", stdin);
	freopen("podm.out", "w", stdout);
	scanf("%ld", &n);
	scanf("%ld", &v[0]);
	for (int i = 1; i <= n; ++i) {
		scanf("%ld", &v[i]);
	}
	INF = 1000000000000000LL;
	
	for ( int i = 1; i <= n; ++i) cost[i][i] = 0;
	for ( int i = 1; i <  n; ++i) cost[i + 1][i] = 1LL * v[i - 1] * v[i] * v[i + 1];
	for (int i = 2; i < n; ++i) {
		for (int j = 1; j <= n - i; ++j) {
			long long *r = cost[i + j];
			r[j] = INF;
			long long val = 1LL * v[j - 1] * v[i + j];
			for (int z = j; z <= j + i - 1; ++z) {
				
				sum = v[z] * val;
				if (r[j] > sum) {
					sum += cost[z][j] + r[z + 1];
					if( r[j] > sum)
						r[j] = sum;
				}
			}
		}
	}
	printf("%lld", cost[n][1]);
	return 0;
}