Cod sursa(job #1393616)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 19 martie 2015 17:10:31
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#include <vector>
#include <limits>

int main()
{
	std::ifstream in("podm.in");
	std::ofstream out("podm.out");

	int N;
	in >> N;

	std::vector<int> dimensions(N + 1);
	for (auto &elem : dimensions)
		in >> elem;

	std::vector<std::vector<long long> > M(N + 1, std::vector<long long>(N + 1, 0));
	for (auto step = 1; step < N; step++)
		for (auto i = 1; i <= N - step; i++) {
			auto aux = std::numeric_limits<long long>::max();
			auto j = i + step;
			for (auto k = i; k < j; k++)
				aux = std::min(
					aux, M[i][k] + M[k + 1][j] + 1LL * dimensions[i - 1] * dimensions[k] * dimensions[j]);
			M[i][j] = aux;
		}

	out << M[1][N] << '\n';

	return 0;
}