Cod sursa(job #377968)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 27 decembrie 2009 00:38:59
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#define ll long long
#define NMAX 1<<9
#define inf 2000000000
int n,d[NMAX];
ll best[NMAX][NMAX];
void read()
{
	scanf("%d",&n);
	int i;
	for (i=1; i<=n+1; i++)
		scanf("%d",&d[i]);
}
ll min(ll x,ll y)
{
	return x<y ? x : y;
}
void solve()
{
	int i,j,k;
	for (i=1; i<n; i++)
		for (j=1; j<=n-i; j++)
			if (i==1)
			{
				best[j][j+1]=(ll)d[j]*d[j+1]*d[j+2];
			}
			else
			{
				best[j][j+i]=best[j+1][j+i]+(ll)d[j]*d[j+1]*d[j+i+1];
				for (k=j; k<j+i; k++)
					best[j][j+i]=min(best[j][j+i],best[j][k]+best[k+1][j+i]+(ll)d[j]*d[k+1]*d[j+i+1]);
			}
}
int main()
{
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);
	read();
	solve();
	printf("%lld\n",best[1][n]);
	return 0;
}