Cod sursa(job #649580)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 16 decembrie 2011 13:32:04
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
#include<iostream>
#include<limits>
#define minim(a,b) a<b?a:b
using namespace std;
void read(),solve();
int n,i,j,k;
long long aux,M[550][550],D[550],INF;
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n+1;i++)scanf("%lld",&D[i]);
}
void solve()
{
	INF=numeric_limits<long long>::max();
	for(i=n;i>=1;i--)
		for(j=i;j<=n;j++)
		{
			M[i][j]=INF;
			if(i==j){M[i][j]=0;continue;}
			if(i==j-1){M[i][j]=D[i]*D[j]*D[j+1];continue;}
			for(k=i;k<j;k++)
			{
				aux=M[i][k]+M[k+1][j]+D[i]*D[k+1]*D[j+1];
				M[i][j]=minim(M[i][j],aux);
			}
		}
	printf("%lld\n",M[1][n]);
}