Cod sursa(job #2347386)

Utilizator Paulet.StefanPauletStefan Paulet.Stefan Data 18 februarie 2019 18:56:38
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#define VMAX 505
using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

unsigned long long int cmin[VMAX][VMAX];
int n, d[VMAX];


unsigned long long int minim(unsigned long long int x, unsigned long long int y);

int main()
{
	int i, j, k, t;
	fin >> n;
	for (i = 0; i <= n; i ++)
		fin >> d[i];
	for (i = 1; i < n; i ++)
		cmin[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
	for (t = 3; t <= n; t ++)
		for (i = 1; i <= n - t + 1; i ++)
		{
			j = i + t - 1;
			cmin[i][j] = cmin[i][i] + cmin[i + 1][j] + d[i - 1] * d[i] * d[j];
			cmin[j][i] = i;
			for (k = i + 1; k < j; k ++)
			{
				if (cmin[i][j] > cmin[i][k] + cmin[k + 1][j] + d[i - 1] * d[k] * d[j])
					cmin[j][i] = k;
				cmin[i][j] = minim(cmin[i][j], cmin[i][k] + cmin[k + 1][j] + d[i - 1] * d[k] * d[j]);
			}
		}
	fout << cmin[1][n] << '\n';
    return 0;
}

unsigned long long int minim(unsigned long long int x, unsigned long long int y)
{
	if (x <= y)
		return x;
	return y;
}