Cod sursa(job #2503945)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 3 decembrie 2019 23:06:07
Problema Parantezare optima de matrici Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

const int64_t INF = 1e16;

const int MAXN = 510;
int64_t DP[MAXN][MAXN];
int DIM[MAXN];
int N;
int main() {
	fin >> N;
	for (int i = 0; i <= N; i++) fin >> DIM[i];

	for (int i = 1; i < N; i++) {
		DP[i][i + 1] = DIM[i - 1] * DIM[i] * DIM[i + 1];
	}

	for (int len = 2; len <= N; len++) {
		for (int left = 1; left + len <= N; left++) {
			int right = left + len;
			int64_t mn = INF;

			for (int stop = 1; stop < right; stop++) {
				int64_t cost = DP[left][stop] +
							   DP[stop + 1][right] +
							   DIM[left - 1] * DIM[stop] * DIM[right];
				
				mn = min(mn, cost);
			}

			DP[left][right] = mn;
		}
	}

	fout << DP[N][N];

	// for (int i = 1; i <= N; i++) {
	// 	for (int j = 1; j <= N; j++) {
	// 		cout << DP[i][j] << " ";

	// 	}
	// 	cout << endl;
	// }

	return 0;
}