Cod sursa(job #379932)

Utilizator elmercerAlex Mercer elmercer Data 4 ianuarie 2010 13:33:11
Problema Parantezare optima de matrici Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <stdio.h>
#include <string>

using namespace std;

int n, v[512];
long long cost[512][512], sum, INF;

	/*int i,j,k;
	ll nr;
	for (i=1; i<n; i++)
		for (j=1; j<=n-i; j++)
		{
			nr=INF;
			for (k=j; k<j+i; k++)
				nr=min(nr,best[j][k]+best[k+1][j+i]+(ll)d[j]*d[k+1]*d[j+i+1]);
			best[j][j+i]=nr;
		}
}*/
void solve()
{
	int i,j,z;
	long long val;
	for ( i = 1; i < n; ++i) 
		for ( j = 1; j <= n - i; ++j) {
			
			val = INF;
			for ( z = j; z < j + i ; ++z) 
				val = min( val, cost[j][z] + cost[z+1][i+j]+( long long)v[j-1] *v[z] *v[i+j]);
			
			
			cost[j][j+i] = val;
		}
	
	
}
int main() {
	int i;
	freopen("podm.in", "r", stdin);
	freopen("podm.out", "w", stdout);
	scanf("%d", &n);
	scanf("%d", &v[0]);
	for ( i = 1; i <= n; ++i) {
		scanf("%d", &v[i]);
	}
	INF = 666666666666666LL ;
	
	
	for ( i = 1; i <= n; ++i) cost[i][i] = 0;
	//for ( i = 1; i <  n; ++i) cost[i][i+1] = 1LL * v[i - 1] * v[i] * v[i + 1];
	
	/*int i,j,k;
	ll nr;
	for (i=1; i<n; i++)
		for (j=1; j<=n-i; j++)
		{
			nr=INF;
			for (k=j; k<j+i; k++)
				nr=min(nr,best[j][k]+best[k+1][j+i]+(ll)d[j]*d[k+1]*d[j+i+1]);
			best[j][j+i]=nr;
		}
}*/
	solve();
	
	printf("%lld", cost[1][n]);
	return 0;
}