Cod sursa(job #472876)

Utilizator robigiirimias robert robigi Data 26 iulie 2010 21:40:52
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
// Parantezare optima de matrici.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "stdio.h"

FILE *f=fopen("podm.in", "r");
FILE *g=fopen("podm.out", "w");

long long n, d[505];
long long v[505][505];


void read()
{
	fscanf(f, "%lld", &n);
	for (long long i=0; i<=n; i++)
		fscanf(f, "%lld", &d[i]);
	for (long long j=0; j<=504; ++j)
		for (long long k=0; k<=504; ++k)
			v[j][k]=100000000000000000;
}


long long minim(long long x, long long y)
{
	if (x<y) return x;
	return y;
}


void program()
{
	for (long long i=1; i<=n; i++)
	{
		v[i][i+1]=d[i-1]*d[i]*d[i+1];
		v[i][i]=0;
	}

	for (long long k=2; k<n; ++k)
		for (long long i=1; i<=n-2; ++i)
			for (long long j=i; j<i+k; ++j)
				v[i][i+k]=minim(d[i-1]*d[j]*d[i+k]+v[i][j]+v[j+1][i+k], v[i][i+k]);
}

int main()
{
	read();
	program();
	fprintf(g, "%lld", v[1][n]);
	return 0;
}