Cod sursa(job #2948894)

Utilizator MihneaStoicaMihnea Teodor Stoica MihneaStoica Data 28 noiembrie 2022 18:38:52
Problema Parantezare optima de matrici Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>

using namespace std;

ifstream cin ("podm.in");
ofstream cout ("podm.out");

constexpr auto mod = 1000000000000000000LL;

long long n, i, j, k, dd, d[511];
long long m[510][510];
long long minim;

int main()
{
	cin >> n;

	for (i = 1; i <= n + 1; i++)
	{
		cin >> d[i];
	}

	n++;

	for (dd = 0; dd < n; dd++)
	{
		if (dd == 0)
		{
			for (i = 1; i <= n; i++)
			{
				m[i][i] = 0;
			}
		}
		else
		{
			if (dd == 1)
			{
				for (i = 1; i < n; i++)
				{
					m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
				}
			}
			else
			{
				for (i = 1; i <= n - dd; i++)
				{
					minim = mod;

					for (k = i; k < i + dd; k++)
					{
						minim = min (minim, m[i][k] + m[k + 1][i + dd] + d[i - 1] * d[k] * d[i + dd]);
					}

					m[i][i + dd] = minim;
				}
			}
		}
	}

	cout << m[2][n] << '\n';
	return 0;

}