Cod sursa(job #371200)

Utilizator FlorianFlorian Marcu Florian Data 4 decembrie 2009 10:09:09
Problema Parantezare optima de matrici Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<cstdio>
using namespace std;
#define MAX_N 512
#define Inf 100000000000000000LL
#define ll long long
ll bst[MAX_N][MAX_N];
int d[MAX_N], N;
int main()
{
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);
	scanf("%d",&N);
	int i,j,k,lg;
	ll tmp;
	for(i=1;i<=N+1;++i) scanf("%d",&d[i]);
	for(i=1;i<=N;++i) 
	{
		for(j=1;j<=N;++j) bst[i][j] = Inf;
		bst[i][i] = 0;
	}
	for(lg = 1; lg <= N; ++lg)
	{
		for(i=1;i<=N; ++i)
		{
			j = lg + i - 1;
			if(j > N) break;
			for(k = i; k <= j; ++k)
			{
				tmp = (ll)bst[i][k-1] + bst[k][j] + (ll)d[i] * d[k] * d[j+1];
				if(tmp < bst[i][j] ) bst[i][j] = tmp;
			}
		}
	}
	printf("%lld\n",bst[1][N]);
	return 0;
}