Cod sursa(job #1581344)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 26 ianuarie 2016 19:13:09
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 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;

long long a[NMAX];
long long dp[NMAX][NMAX];

long long calc(int l, int r) {
	if (dp[l][r] != -1)
		return dp[l][r];

	int i;
	long long 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];

	memset(dp, -1, sizeof(dp));
	for (i = 1; i <= n; ++i)
		dp[i][i] = 0;
	for (i = 1; i < n; ++i)
		dp[i][i + 1] = a[i - 1] * a[i] * a[i + 1];
	calc(1, n);

	cout << dp[1][n];

	return 0;
}