Cod sursa(job #1059214)

Utilizator UnforgivenMihai Catalin Botezatu Unforgiven Data 16 decembrie 2013 13:29:25
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>

const static int NMAX = 510;
const static long long INFINIT = (1LL << 62);

using namespace std;

ifstream input("podm.in");
ofstream output("podm.out");
long long dimensiuni[NMAX];
long long dp[NMAX][NMAX];
int N;

int main()
{
	input >> N;
    for (int i = 0; i <= N ; i++)
	{
		input >> dimensiuni[i];
		for (int j = 0; j <= N ; j++)
		{
			dp[i][j] = INFINIT;
		}
	}
	input.close();
	for (int i = 1; i <= N - 1 ; i++)
	{
		dp[i][i] = 0;
		dp[i][i+1] = dimensiuni[i - 1] * dimensiuni[i] * dimensiuni[i + 1];
	}
	dp[N][N] = 0;

	for (int l = 1 ; l <= N ; l++)
		for (int i = 1 ; i <= N - l; i++)
		{
			int j = l + i;

			for (int k = i ; k <= j - 1 ; k++)
			{
				dp[i][j] = min(dp[i][j] , dp[i][k] + dp[k + 1][j] + dimensiuni[i - 1] * dimensiuni[k] * dimensiuni[j]);
			}
		}

	output << dp[1][N];

    return 0;
}