Cod sursa(job #794624)

Utilizator hasegandaniHasegan Daniel hasegandani Data 6 octombrie 2012 18:13:49
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MAX = 505;
const long long inf = 0x3f3f3f3f3f3f3f3f;

int N;
int vect[MAX];
long long mat[MAX][MAX];

void solve()
{
	for(int i=0;i<N-1;++i)
		mat[i][i+1] = vect[i]*vect[i+1]*vect[i+2];

	for(int i=2;i<N;++i)
		for(int j=0;i+j<N;++j)
		{
			int x = j,y = j+i;
			mat[x][y]  = inf;
			for(int k=0;k<i;++k)
				if (mat[x][y] > mat[x][x+k] + mat[x+k+1][y] + (long long)vect[x]*vect[x+k+1]*vect[y+1])
					mat[x][y] = mat[x][x+k] + mat[x+k+1][y] + (long long)vect[x]*vect[x+k+1]*vect[y+1];
		}
	

	ofstream fout;
	fout.open("podm.out");
	fout << mat[0][N-1] << endl;
	fout.close();
}

void read()
{
	ifstream fin;
	fin.open("podm.in");

	fin >> N;
	for(int i=0; i<=N ; ++i)
		fin >> vect[i];

	fin.close();
}

int main()
{
	read();
	solve();
	return 0;
}