Cod sursa(job #418916)

Utilizator toniobFMI - Barbalau Antonio toniob Data 16 martie 2010 18:05:49
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
using namespace std;

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

const long long NMax=(long long)1<<10;
const long long Mult=100000000000000LL;
long long D[505],PD[501][501],N;

void EXE(),IN(),OUT(),PD_GENERARE();
int main(){EXE();return 0;}

void EXE(){
	IN();
	PD_GENERARE();
	OUT();
}

void IN(){
	FIn>>N;
	for(long long i=1;i<=N+1;FIn>>D[i++]);
}

void OUT(){
	FOut<<PD[1][N]<<"\n";
}

void PD_GENERARE(){
	for(long long i=1;i<N;PD[i][i]=0,PD[i][i+1]=D[i]*D[i+1]*D[i+2],++i);
	for(long long i=2;i<N;++i){
		for(long long j=1,minim;j<=N-i;++j){
			PD[j][i+j]=Mult;
			for(int k=j;k<=i+j-1;++k){
				minim=PD[j][k]+PD[k+1][i+j]+D[j]*D[k+1]*D[i+j+1];
				if(minim<PD[j][j+i]){
					PD[j][j+i]=minim;
				}
			}
		}
	}
}