Cod sursa(job #648496)

Utilizator nandoLicker Nandor nando Data 13 decembrie 2011 16:48:54
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <fstream>
using namespace std;

fstream fin("podm.in", ios::in);
fstream fout("podm.out", ios::out);

#define MAXN 550
#define INF 0x3f3f3f3f

typedef long long int64;

int n;
int64 d[MAXN][MAXN], a[MAXN];

int main()
{
	fin >> n;
	
	for (int i = 0; i <= n; ++i) {
		fin >> a[i];
		for (int j = 1; j <= n; ++j) {
			d[i][j] = INF;
		}

		if (i >= 2) {
			d[i - 1][i] = a[i - 2] * a[i - 1] * a[i];
		}

		d[i][i] = 0;
	}

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

	fout << d[1][n] << endl;

	fin.close();
	fout.close();
	return 0;
}