Cod sursa(job #761625)

Utilizator Marius96Marius Gavrilescu Marius96 Data 26 iunie 2012 20:38:06
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include<cstdio>
#include<algorithm>
long long m[505][505];
long long d[505];

long long calc (int x,int y)
{
	if(m[x][y])
		return m[x][y];
	if(x==y)
		return 0;
	if(x+1==y)
		return d[x-1]*d[x]*d[x+1];
	long long r=1000000000000000000LL;
	for(int k=x;k<y;k++)
		r=std::min (r,m[x][k]+m[k+1][y]+d[x-1]*d[k]*d[y]);
	return r;
}

int main()
{
	freopen ("podm.in","r",stdin);
	freopen ("podm.out","w",stdout);
	int n;
	scanf ("%d",&n);
	for(int i=0;i<=n;i++)
		scanf ("%lld",d+i);
	for(int d=0;d<n;d++)
		for(int i=1;i<=n-d;i++)
			m[i][i+d]=calc (i,i+d);
	printf ("%lld",calc (1,n));
	return 0;
}