Cod sursa(job #1051045)

Utilizator ioanapopaPopa Ioana ioanapopa Data 9 decembrie 2013 17:36:05
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<iostream>
#include<fstream>
#include<cmath>
#define Nmax 505
#define oo 0xfffffffffffff
using namespace std;

class Paranthesis
{
	int vector[Nmax];
	long long M[Nmax][Nmax];
	int n;
public:
	long long min(long long a , long long b)
	{
		if(a<b) 
			return a;
		else 
			return b;
	}
	void read()
	{
		ifstream f("podm.in");
		f>>n;

			for(int i =0;i<=n;i++)
			f>>vector[i];
		f.close();
	}
	void problem()
	{
			for(int i=1;i<=n;i++)
				M[i][i]=0;
			for(int i=1;i<=n;i++)
				for(int j=i+2;j<=n;j++)
					M[i][j]=oo;
			for(int i=1;i<n;i++)
				M[i][i+1]=vector[i-1]*vector[i]*vector[i+1];
			for(int l=2;l<n;l++)
				for(int i=1;i+l<=n;i++)
				{
					int j=i+l;
					for(int k=i;k<j;k++)
						M[i][j]=min(M[i][j], M[i][k] + M[k+1][j] + vector[i-1]*vector[k]*vector[j]);
				}
	}
	void print()
	{
		ofstream g("podm.out");
		g<<M[1][n];
		g.close();
	}
};
	int main()
{
	Paranthesis P;
	P.read();
	P.problem();
	P.print();
}