Cod sursa(job #380168)

Utilizator AndreyPAndrei Poenaru AndreyP Data 4 ianuarie 2010 22:52:35
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#define N 505
int d[N];
int n;
long long a[N][N];
inline void citire()
{
	scanf("%d",&n);
	for(int i=0; i<=n; ++i)
		scanf("%d",&d[i]);
}
inline long long minim(long long x,long long y)
{
	if(x<y)
		return x;
	return y;
}
inline void rezolva()
{
	int t;
	//long long aux;
	for(int i=2; i<=n; ++i)
	{
		for(int j=1; i+j-1<=n; ++j)
		{
			t=i+j-1;
			a[j][t]=a[j+1][t]+(long long)d[j-1]*d[j]*d[t];
			for(int w=j+1; w<t; ++w)
			{
				a[j][t]=minim(a[j][t],a[j][w]+a[w+1][t]+(long long)d[j-1]*d[w]*d[t]);
				//aux=a[j][w]+a[w+1][t]+(long long)d[j-1]*d[w]*d[t];
				//if(aux<a[j][t])
				//	a[j][t]=aux;
			}
		}
	}
}
int main()
{
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);

	citire();
	rezolva();

	printf("%lld\n",a[1][n]);
	return 0;
}