Cod sursa(job #1059212)

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

const static int NMAX = 510;
const static int INFINIT = (1 << 20);

using namespace std;

ifstream input("podm.in");
ofstream output("podm.out");
int dimensiuni[NMAX];
int 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]);
			}
		}

	ouput << dp[1][N];

    return 0;
}