Cod sursa(job #970735)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 7 iulie 2013 18:04:36
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
//http://www.infoarena.ro/problema/podm
#include<fstream>
using namespace std;
const int MAXN=502;
const long long INF=(1LL<<60);
long long n,minim,d[MAXN],m[MAXN][MAXN];
void citire()
{
	ifstream fin("podm.in");
	fin>>n;
	for (int i=0;i<=n;++i)
		fin>>d[i];
	fin.close();
}
void rezolva()
{
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
			if (i!=j)
				m[i][j]=INF;
	for (int nr=2;nr<=n;++nr)
	{
		for (int i=1;i<=n-nr+1;++i)
		{
			int j=i+nr-1;
			minim=INF;
			for (int k=i;k<j;++k)
			{
				if (m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j]<minim)
					minim=m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j];
				m[i][j]=minim;
			}
		}
	}

}
void afisare()
{
	ofstream fout("podm.out");
	fout<<m[1][n]<<'\n';
	fout.close();
}
int main()
{
	citire();
	rezolva();
	afisare();
	return 0;
}