Cod sursa(job #1404811)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 28 martie 2015 16:13:11
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <algorithm>
#include <fstream>
using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");
const int kMax = 505;
const int kInf = (1 << 30);
int n, dim[kMax], dp[kMax][kMax];

void findMinimumOperations()
{
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= n; ++j)
			dp[i][j] = kInf;

	for (int i = 1; i <= n; ++i)
		dp[i][i] = 0;

    for (int lg = 2; lg <= n; ++lg)
	{
		for (int i = 1; i <= n - lg + 1; ++i)
		{
			int j = i + lg - 1;
			for (int k = i; k <= j - 1; ++k)
				dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + dim[i - 1] * dim[k] * dim[j]);
		}
	}
}

int main()
{
	fin >> n;
	for (int i = 0; i <= n; ++i)
		fin >> dim[i];

	findMinimumOperations();
	fout << dp[1][n] << '\n';

	return 0;
}