Cod sursa(job #1981804)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 16 mai 2017 20:30:14
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>
#include <climits>
using namespace std;
typedef long long LL;

#ifdef INFOARENA
#define ProblemName "huffman"
#endif

#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif

#define MAXN 510
int v[MAXN];
LL dp[MAXN][MAXN];

int main() {
	assert(freopen(InFile, "r", stdin));
	assert(freopen(OuFile, "w", stdout));
	int N;
	scanf("%d", &N);
	memset(dp, 0, sizeof(dp));
	for (int i = 0; i <= N; ++i) {
		scanf("%d", &v[i]);
		if (i >= 2)
			dp[i - 1][i] = 1LL * v[i - 2] * v[i - 1] * v[i];
	}
	for (int d = 2; d < N; ++d)
	for (int i = 1; i <= N - d; ++i) {
		int j = i + d;
		dp[i][j] = LLONG_MAX;
		for (int s = i; s < j; ++s) {
			LL candidate = dp[i][s] + dp[s + 1][j] + 1LL * v[i - 1] * v[s] * v[j];
			if (candidate < dp[i][j])
				dp[i][j] = candidate;
		}
	}
	printf("%lld\n", dp[1][N]);
}