Cod sursa(job #369628)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 28 noiembrie 2009 23:55:20
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

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

int n,i,j,k,dd,d[511];
int m[510][510];
int minim;

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

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	
	scanf("%d", &n);
	for (i=1;i<=n+1;++i)
		 scanf("%d", &d[i]);
	n++;
	
	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=0x3f3f3f3f;
				for (k=i;k<i+dd;++k)
					 minim=min(minim,m[i][k]+m[k+1][i+dd]+d[i-1]*d[k]*d[i+dd]);
				m[i][i+dd]=minim;
			}
		}
	}
	
	/*for (i=1;i<=n;++i)
	{
		for (j=1;j<=n;++j)
			 printf("%d ", m[i][j]);
		printf("\n");
	}*/
	printf("%d\n", m[2][n]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}