Cod sursa(job #2297599)

Utilizator AndreiTudorAndrei Tudor AndreiTudor Data 6 decembrie 2018 09:27:34
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <limits.h>
#define NMAX 510

using namespace std;

long long matrix[NMAX][NMAX], sizes[NMAX], n;

void solve()
{
    long long minValue, value;
    for (int i=1; i<n; i++)
        matrix[i][i+1] = sizes[i-1] * sizes[i] * sizes[i+1];
    for (int d=2; d<n; d++)
    {
        for (int i=1; i<=n-d; i++)
        {
            minValue = LONG_LONG_MAX;
            for (int k=i; k<i+d; k++)
            {
                value = matrix[i][k] + matrix[k+1][i+d] + sizes[i-1] * sizes[k] * sizes[i+d];
                if (value < minValue)
                    minValue = value;
            }
            matrix[i][i+d] = minValue;
        }
    }
}

int main()
{
    ifstream fin("podm.in");
    ofstream fout("podm.out");
    fin >> n;
    for (int i=0; i<=n; i++)
        fin >> sizes[i];
    solve();
    fout << matrix[1][n];
    return 0;
}