Cod sursa(job #670490)

Utilizator matei_cChristescu Matei matei_c Data 29 ianuarie 2012 12:43:04
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>

const int MAX_N = 505;
const long long INF = 10000000000LL;

int n;
long long d[MAX_N];
long long dp[MAX_N][MAX_N];

long long minim(long long a,long long b)
{
	if(a<b)
		return a;
	return b;
}

int main()
{
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n+1;++i)
		scanf("%lld",&d[i]);
	for(int i=n;i>=1;--i)
	{
		for(int j=1;j<=n;++j)
		{
			dp[i][j] = INF;
			if(i==j)
			{
				dp[i][j]=0;
				continue;
			}	
			if(i==j-1)
			{
				dp[i][j]=d[i]*d[j]*d[j+1];
				continue;
			}	
			for(int k=i;k<j;++k)
				dp[i][j] = minim(dp[i][j],dp[i][k]+dp[k+1][j]+d[i]*d[k+1]*d[j+1]);
		}
	}	
	printf("%lld\n",dp[1][n]);
	return 0;
}