Cod sursa(job #501158)

Utilizator AnkutzaAnca Ioana Ankutza Data 14 noiembrie 2010 14:23:41
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#include<stdlib.h>

const long long INF = (long long) 1 << 60;
const int N = 501;
long long mat[N][N];

inline long long min(long long a,long long b){
	return a<b ? a : b;
}

long long parOpt(int *v,int n){
	int i,j,k;
	for(i = n - 1;i >= 1;i--)
		for(j = i + 1;j <= n;j++){
			mat[i][j] = INF;
			for(k = i; k < j;k++){
				mat[i][j] = min(mat[i][j],mat[i][k] + mat[k + 1][j] + (long long)v[i] * v[k + 1] * v[j + 1]);
			}
		}
	return mat[1][n];
}

int main(){
	FILE *f,*g;
	f = fopen("podm.in","r");
	g = fopen("podm.out","w");
	int n,i;
	fscanf(f,"%d",&n);
	int *v = (int*)malloc((n + 2) * sizeof(int));
	for(i = 1;i <= n+1 ; i++)
		fscanf(f,"%d",&v[i]);
	long long nropt = parOpt(v,n);
	fprintf(g,"%lld",nropt);
	fclose(f);
	fclose(g);
	return 0;
}