Cod sursa(job #412418)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 5 martie 2010 16:53:12
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>

#define file_in "podm.in"
#define file_out "podm.out"


#define Inf 100000000000000000LL

long long minim,n,i,j,k,dd,d[10000],m[501][501];

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

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%lld", &n);
	n++;
	for (i=1;i<=n;++i)
		 scanf("%lld", &d[i]);
	
	for (dd=0;dd<n;++dd)
	{
		if (dd==0)
			for (i=1;i<=n;++i) m[i][i]=0;
		else
		if (dd==1)
			for (i=1;i<n;++i)
				 m[i][i+1]=d[i-1]*d[i]*d[i+1];
		else
        {
			for (i=1;i<=n-dd;++i)
			{
				minim=Inf;
				for (k=i;k<i+dd;++k)
	                 minim=min(minim,m[i][k]+m[k+1][i+dd]+d[k]*d[i-1]*d[i+dd]);
				m[i][i+dd]=minim;
			}
		}
	}
	
	printf("%lld", m[2][n]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}