Cod sursa(job #372593)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 10 decembrie 2009 21:44:28
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#define Nmax 510

int k, i, j, l, n;
int M[Nmax];
long long OPT[Nmax][Nmax];

int main (){
	
	FILE * f = fopen("podm.in","r");
	
	
	fscanf (f, "%d", &n);
	
	for (i = 1 ; i <= n + 1 ; i++)
		fscanf (f, "%d", &M[i]);
	
	for (i = 1; i < n; i++)
		OPT[i][i+1]  = (long long) M[i] * M[i+1] * M[i+2];
	
	for (l = 3 ; l <= n ; l++)
		for (i = 1 ; i <= n - l + 1 ; i++){
			j = i + l - 1;
			if (j > n) j = n;
			OPT[i][j] = (long long) 1<<60;	
			for (k = i ; k < j ; k++)
				if (OPT[i][j] > OPT[i][k] + OPT[k+1][j] + M[i] * M[k+1] * M[j+1])
					OPT[i][j] = OPT[i][k] + OPT[k+1][j] + M[i] * M[k+1] * M[j+1];
		}
		
	FILE * g = fopen ("podm.out" , "w");
		
	fprintf (g, "%lld", OPT[1][n]);
	
	fclose(f);
	fclose(g);
	return 0;
}