Cod sursa(job #507684)

Utilizator avram_florinavram florin constantin avram_florin Data 6 decembrie 2010 16:36:24
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
//parantezare optima de matrici
// complexitate n^3
// programare dinamica

#include<fstream>
#include<cstdio>
#define INF 100000000000000000LL

using namespace std;
ifstream f ("podm.in");
ofstream g ("podm.out");

long long n,d[505],c[505][505];

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

int main()
{
	f >> n;
	int i,j,k,o;
	for( i = 1 ; i <= n+1 ; i++ )
		f >> d[i];
	for( i = 1 ; i < n ; i++ )
		c[i][i+1] = d[i]*d[i+1]*d[i+2];
	for( o = 2 ; o <= n ; o++ )
		for(i = 1 ; i <= n - o + 1 ; i++ )
			{
				j = o + i - 1;
				c[i][j] = INF;
				for( k = i ; k < j ; k++ )
					c[i][j] = min(c[i][j],c[i][k]+c[k+1][j]+d[i]*d[k+1]*d[j+1]);
			}
	g << c[1][n] << '\n';
	f.close();
	g.close();
	return 0;
}