Cod sursa(job #687974)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 22 februarie 2012 21:50:42
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

using namespace std;

ifstream in("podm.in");
ofstream out("podm.out");

const int N=510;

int n;
int d[N];
long long m[N][N];
const long long INF=1<<60;

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

void initialize(){
	int i,j;
	for(i=1;i<=n;++i){
		for(j=1;j<=n;j++){
			if(i==j){
				m[i][i]=0;
				continue;
			}
			m[i][j]=INF;
		}
	}
	for(i=1;i<n;i++){
		m[i][i+1]=d[i]*d[i+1]*d[i+2];
	}

}

void solve(){
	int i,j,k;
	for(i=2;i<=n;++i){
		for(j=1;j<=n-i;++j){
			for(k=j;k<=j+i-1;++k){
				m[j][j+i]=min(m[j][j+i],d[j]*d[k+1]*d[j+i+1]+m[j][k]+m[k+1][j+i]);
			}
		}
	}
	out<<m[1][n];
}

int main(){
	int i;
	in>>n;
	for(i=1;i<=n+1;++i){
		in>>d[i];
	}
	initialize();
	solve();
	return 0;
}