Cod sursa(job #2279731)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 9 noiembrie 2018 21:58:56
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
 
#define MAXN 500

int D[MAXN+1];

long long c[MAXN][MAXN];

int N;

void minpar(){
	// initializarea costului cu 0 (multiplicari)
	long long temp;
	for (int i = 0 ; i < N; i++)
		c[i][i] = 0;

	for (int i = 0 ; i < (N-1); i++)
		c[i][i+1] = (long long)D[i]*(long long)D[i+1]*(long long)D[i+2];

	int j;

	for (int d = 2 ; d <= (N-1); d++){
		for (int i = 0 ; i <= (N-1-d); i++){
			j=i+d;
			c[i][j] = c[i][i] + c[i+1][j] + (long long)D[i] * (long long)D[i+1] * (long long)D[j+1];;
			for (int h = (i+1) ; h < (i+d); h++){
				temp = c[i][h] + c[h+1][j] + (long long)D[i] * (long long)D[h+1] * (long long)D[j+1];
				if ( temp < c[i][j] )
					c[i][j] = temp; // se salveaza costul
			}
		}
	}
}


int main () {
 
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);
 
    scanf("%d", &N);
 
    for (int i = 0; i <= N; ++ i)
        scanf("%d", &D[i]);
 

	minpar();

	printf("%lld\n",c[0][N-1]);

	return 0;
}