Cod sursa(job #1711785)

Utilizator ArkinyStoica Alex Arkiny Data 1 iunie 2016 10:30:27
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<fstream>
#include<algorithm>
using namespace std;

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

long long D[510][510][3];

int main()
{
	int N;
	int a,b;
	in >> N;
	in >> a;
	for (int i = 2;i <= N + 1;++i)
		in >> b, D[i-1][i][0] = a, D[i-1][i][1] = b, a = b;

	for (int i = 1;i <= N - 1;++i)
		for (int j = 1;j + i +1 <= N+1;++j)
		{
			long long mn = 1LL << 60,s=0;
			for (int k = j+1;k <= i+j;++k)
			{
				if (D[j][k][0] * D[k][i + j+1][0] * D[k][i + j+1][1] + D[j][k][2] + D[k][i + j + 1][2] < mn)
				{
					mn = D[j][k][0] * D[k][i + j+1][0] * D[k][i + j+1][1] + D[j][k][2] + D[k][i + j + 1][2];
					D[j][i + j+1][0] = D[j][k][0];
					D[j][i + j+1][1] = D[k][i+j+1][1];
				}
			}
			D[j][i + j+1][2] = mn;

		}

	out << D[1][N+1][2] << '\n';

	return 0;
}