Cod sursa(job #1208359)

Utilizator vladmatei.nfoVlad Matei vladmatei.nfo Data 15 iulie 2014 15:11:47
Problema Parantezare optima de matrici Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#define infinit 9999999999

using namespace std;

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

long long m[510][510];
int n,d[510];

void getMatrix()
{
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            cout<<m[i][j]<<" ";
        }
        cout<<"\n";
    }
}
void init()
{
	for(int i = 1; i < n; i++)
	{
		m[i][i+1] = d[i] * d[i + 1] * d[i + 2];
	}
}

long long getMin(int x, int y)
{
	long long min = infinit;
	long long s;
	for(int i = 1 ; i <= y - x; i++)
    {
        s = d[x] * d[x + i] * d[y + 1] + m[x][x + i - 1] + m[x + i][y];
        if(min > s)
        {
            min = s;
        }
    }

	return min;
}

void solve()
{
    int k;
	for(int j = 3; j <= n; j++)
	{
	    k = 0;
		for(int i = 1; i <= n - j + 1; i++)
		{
			m[i][j + k] = getMin(i,j);
			k++;
		}
	}
}

void read()
{
	in>>n;
	for(int i = 1; i <= n + 1; i++)
	{
		in>>d[i];
	}
}

void write()
{
	out<<m[1][n];
}

int main()
{
	read();
	init();
	solve();
	write();
	return 0;
}