Cod sursa(job #447506)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 28 aprilie 2010 21:58:54
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>

using namespace std;

struct matrix
{
	int lin,col;
} M[512];

long long n;
long long a[512][512];

void read();
void podm();
void write();
void initializare();

int main()
{
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);
	read();
	initializare();
	podm();
	write();
	return 0;
}

void read()
{
	long long i,x,y;
	scanf("%ld",&n);
	scanf("%ld",&x);
	for (i=1;i<=n;++i)
	{
		scanf("%ld",&y);
		M[i].lin=x;
		M[i].col=y;
		x=y;
	}
}

void initializare()
{
	long long i;
	for (i=1;i<n;++i)
		a[i][i+1]=M[i].lin*M[i].col*M[i+1].col;
}

void podm()
{
	long long i,j,k,d,min,s;
	for (d=3;d<=n;++d)
		for (i=1,j=d;j<=n;++i,++j)
		{
			min=-1;
			for (k=i;k<j;++k)
			{
				s=a[i][k]+a[k+1][j]+M[i].lin*M[k+1].lin*M[j].col;
				if (min==-1) min=s;
				if (s<min) min=s;
			}
		a[i][j]=min;
		}
}

void write()
{
	printf("%ld\n",a[1][n]);
}