Cod sursa(job #2382274)

Utilizator vlad_popaVlad Popa vlad_popa Data 17 martie 2019 23:19:47
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>


int main ()
{
	std::ifstream in("podm.in");
	std::ofstream out("podm.out");
	
	int N;
	in >> N;
	std::vector<long long> x(N+1);
	for (int i = 0; i <= N; ++ i)
		in >> x[i];
	in.close();
	
	std::vector<std::vector<long long> > d(N+1, std::vector<long long>(N+1, LLONG_MAX));
	d[N][N] = 0;
	for (int i = 1; i < N; ++ i) {
		d[i][i] = 0;
		d[i][i+1] = x[i-1] * x[i] * x[i+1];
	}
	
	for (int j = 2; j < N; ++ j) {
		for (int i = 1; i + j <= N; ++ i) {
			for (int k = i; k < i + j; ++ k) {
				if (d[i][i+j] > d[i][k] + d[k+1][i+j] + x[i-1] * x[k] * x[i+j]) {
					d[i][i+j] = d[i][k] + d[k+1][i+j] + x[i-1] * x[k] * x[i+j];
				}
			}
		}
	}
	
	out << d[1][N] << "\n";
	
	out.close();
	
	return 0;
}