Cod sursa(job #1711737)

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

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

int 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;

	int rez = 1 << 30;
	for (int i = 1;i <= N - 1;++i)
		for (int j = 1;j + i +1 <= N+1;++j)
		{
			int mn = 1 << 30,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] < mn)
				{
					mn = D[j][k][0] * D[k][i + j+1][0] * D[k][i + j+1][1];
					D[j][i + j+1][0] = D[j][k][0];
					D[j][i + j+1][1] = D[k][i+j+1][1];
					s = D[j][k][2] + D[k][i + j+1][2];
				}
			}
			D[j][i + j+1][2] = mn + s;

			if (i == N - 1)
				rez = min(rez, D[j][i + j + 1][2]);
		}

	out << rez << '\n';

	return 0;
}