Cod sursa(job #880437)

Utilizator vlad.maneaVlad Manea vlad.manea Data 16 februarie 2013 19:26:22
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>

using namespace std;

class Parantezare
{
	int N;
	int sizes[55];
	long long result[55][55];

public:

	Parantezare(string inFile, string outFile)
	{
		read(inFile);
		solve();
		write(outFile);
	}

private:

	void read(string inFile)
	{
		ifstream fin(inFile);
		fin >> N;

		for (int i = 0; i <= N; ++i)
		{
			fin >> sizes[i];
		}

		fin.close();
	}

	void solve()
	{
		int i, k, l;

		// Compute for length 1
		for (i = 0; i < N; ++i)
		{
			result[1][i] = 0;
		}

		// Compute for bigger lengths
		for (l = 2; l <= N; ++l)
		{
			for (i = 0; i <= N - l; ++i)
			{
				result[l][i] = numeric_limits<long long>::max();

				for (k = 1; k < l; ++k)
				{
					result[l][i] = min(result[l][i], 
						(long long) result[k][i] + result[l - k][i + k] + 
						(long long) sizes[i] * sizes[i + k] * sizes[i + l]);
				}
			}
		}
	}

	void write(string outFile)
	{
		ofstream fout(outFile);
		fout << result[N][0];
		fout.close();
	}
};

int main()
{
	Parantezare parantezare("podm.in", "podm.out");
}