Cod sursa(job #1002949)

Utilizator nimeniaPaul Grigoras nimenia Data 29 septembrie 2013 13:15:02
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <string.h>
#include <iostream>
#include <climits>

using namespace std;

ifstream f("podm.in");
ofstream g("podm.out");

int main() {
	int n;
	f >> n;
	long long d[n + 2];
	long long m[n + 2][n + 2];
	memset(m, 0, sizeof(long long) * (n + 2) * (n + 2));
	for (int i = 0; i <= n; i++) {
		f >> d[i];
	}

	for (int i = 1; i < n; i++) {
		m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
	}

	for (int l = 2; l < n; l++) {
		for (int i = 1; i <= n - l; i++) {
			int j = i + l;
			m[i][j] = LLONG_MAX;
			for (int k = i; k < j; k++) {
				m[i][j] = min(
						m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j],
						m[i][j]);
			}
		}
	}

	g << m[1][n] << endl;
	return 0;
}