Cod sursa(job #1581331)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 26 ianuarie 2016 19:08:03
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#define MOD 2011
#define NMAX 505
#define HMAX 550
#define INF 0x3f3f3f3f
#define mp make_pair

using namespace std;

FILE *fin = freopen("podm.in", "r", stdin);
FILE *fout = freopen("podm.out", "w", stdout);

typedef pair<int, int> pii;

int a[NMAX];
int dp[NMAX][NMAX];

int calc(int l, int r) {
	if (l == r)
		return dp[l][r] = 0;
	if (l + 1 == r)
		return dp[l][r] = a[l - 1] * a[l] * a[l + 1];
	if (dp[l][r] != -1)
		return dp[l][r];

	int i, minv = INF;
	for (i = l; i < r; ++i)
		minv = min(minv, calc(l, i) + calc(i + 1, r) + a[l - 1] * a[i] * a[r]);

	return dp[l][r] = minv;
}

int main() {
	int n, i, j, t,k;

	cin >> n;
	for (i = 0; i <= n; ++i)
		cin >> a[i];

	calc(1, n);
	memset(dp, -1, sizeof(dp));

	cout << dp[1][n];

	return 0;
}