Cod sursa(job #525797)

Utilizator icepowdahTudor Didilescu icepowdah Data 26 ianuarie 2011 12:24:00
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
using namespace std;

#define NMAX 500
#define INF 100000000000000000LL

int main(void)
{
	int n, i, j, k, l;
	int d[NMAX+1];
	long long** M = NULL;
	long long q;

	ifstream f("podm.in");
	ofstream g("podm.out");
	
	f >> n;
	for (i=0;i<=n;i++)
	{
		f>>d[i];		
	}
	f.close();

	M = new long long* [n+1];
	for (i=1;i<=n;i++)
	{
		M[i] = new long long [n+1];
		M[i][i] = 0;
	}

	for (l=2;l<=n;l++)
	{
		for (i=1;i<=n-l+1;i++)
		{
			j = i+l-1;
			M[i][j] = M[i][i] + M[i+1][j] + d[i-1]*d[i]*d[j];
			for (k=i+1;k<j;k++)
			{
				q = M[i][k]+M[k+1][j]+d[i-1]*d[k]*d[j];
				if (q < M[i][j])
				{
					M[i][j] = q;
				}
			}
		}
	}
		
	g<<M[1][n]<<'\n';
	g.close();

	for (i=1;i<=n;++i)
	{
		delete[] M[i];
	}
	delete[] M;

	return 0;
}