Cod sursa(job #535131)

Utilizator feelshiftFeelshift feelshift Data 16 februarie 2011 20:05:56
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
// http://infoarena.ro/problema/podm
#include <fstream>
#include <algorithm>
using namespace std;

#define maxSize 501
#define INFINITY 0x3f3f3f3f

ofstream out("podm.out");

int numberOfMatrices;
int size[maxSize];
int best[maxSize][maxSize];

void read();
void print();

int main() {
	read();

	for(int i=1;i<=numberOfMatrices-1;i++)
		best[i][i+1] = size[i-1] * size[i] * size[i+1];
	
	for(int s=2;s<=numberOfMatrices-1;s++)
		for(int i=1;i<=numberOfMatrices-s;i++) {
			int j = i + s;
			best[i][j] = INFINITY;

			for(int k=i;k<=j-1;k++)
				best[i][j] = min(best[i][j],best[i][k] + best[k+1][j] + size[i-1]*size[k]*size[j]);
		}
	//print();
	out << best[1][numberOfMatrices] << "\n";

	return (0);
}

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

	in >> numberOfMatrices;

	for(int i=0;i<=numberOfMatrices;i++)
		in >> size[i];

	in.close();
}

void print() {
	for(int q=1;q<=numberOfMatrices;q++) {
		for(int y=1;y<=numberOfMatrices;y++)
			out << best[q][y] << "       ";
		out << endl;
	}
}