Cod sursa(job #640613)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 26 noiembrie 2011 09:45:35
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
using namespace std;
int n,d[505],best[505][505];
//matricea i are dimensiunile d[i-1]*d[i]
//best[i][j]=nr minim de operatii de inmultire a matricelor i,i+1,...,j

void Citire()
{
	int i;
	ifstream fin("podm.in");
	fin>>n;
	for(i=0;i<=n;i++)
		fin>>d[i];
	fin.close();
}

void Rezolvare()
{
	int i,j,dg,k;
	for(i=1;i<=n;i++)
		best[i][i]=0;
	for(dg=2;dg<=n;dg++)
	{
		for(i=1,j=dg;i<=n && j<=n;i++,j++)
		{
			best[i][j]=2000000000;
			for(k=i;k<j;k++)
			{
				best[i][j]=min(best[i][j],best[i][k]+best[k+1][j]+d[i-1]*d[k]*d[j]);
			}
		}
	}
	
}

void Afisare()
{
	ofstream fout("podm.out");
	fout<<best[1][n]<<"\n";
	fout.close();
}

int main()
{
	Citire();
	Rezolvare();
	Afisare();
	return 0;
}