Cod sursa(job #702225)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 1 martie 2012 20:23:23
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio>
#define NM 510
#define INF 946744073709551594LL
#define LL unsigned long long

using namespace std;

inline LL min(LL a,LL b){return (a<b?a:b);}

LL N,D[NM],M[NM][NM];

int main() {
	freopen("podm.in","r",stdin);
	freopen("podm.out","w",stdout);
	scanf("%lld",&N);
	for (LL i=0;i<=N;i++) scanf("%lld",&D[i]);
	for (LL i=0;i<=N+1;i++)
		for (LL j=0;j<=N+1;j++)
			M[i][j]=INF;
	for (LL i=0;i<=N;i++) M[i][i]=0;
	for (LL i=1;i<N;i++) M[i][i+1]=D[i-1]*D[i]*D[i+1];
    for (LL d=2;d<N;d++)
		for (LL i=1;i<=N-d;i++) {
			M[i][i+d]=INF;
			for (LL k=i;k<i+d;k++)
				M[i][i+d]=min(M[i][i+d],M[i][k]+M[k+1][i+d]+D[i-1]*D[k]*D[i+d]);
		}
	printf("%lld\n",M[1][N]);
	return 0;
}