Cod sursa(job #2024481)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 20 septembrie 2017 18:44:45
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;

#define NMAX 505
#define INF (1LL<<62)

int n;
long long d[NMAX];
long long dp[NMAX][NMAX];

void read();
void dynamic();

int main() {
	freopen("podm.in", "r", stdin);
	freopen("podm.out", "w", stdout);

	read();
	dynamic();

	printf("%lld", dp[1][n]);

	return 0;
}

void read() {
	scanf("%d ", &n);

	for(int i = 0; i <= n; i++)
		scanf("%lld ", &d[i]);
}

void dynamic() {
	for(int di = 1; di < n; di++)
	{
		for(int i = 1; i <= n - di;i++)
		{
			long long row, col;
			row = i;
			col = di + i;
			if(row == col) break;
			long long minim=INF;
			for(int k = row; k < col; k++)
			{
				long long x = dp[row][k] + dp[k + 1][col] + d[row - 1] * d[k] * d[col];
				if(x < minim)
					minim = x;
			}
			dp[row][col] = minim;
		}
	}
}