Cod sursa(job #2750275)

Utilizator michael_blazemihai mihai michael_blaze Data 10 mai 2021 16:39:16
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#define NUM_MATRIXES 505

using namespace std;

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

int n; // num of matrixes
int matrix[NUM_MATRIXES];
long long multiply[NUM_MATRIXES][NUM_MATRIXES];

void read()
{
    fin >> n;


    for (int i = 0; i <= n; ++ i)
        fin >> matrix[i];

}

void print()
{
    fout << n << endl;
    for (int i = 1; i <= n; ++ i)
        fout << i << ": " << matrix[i - 1]
        << ' ' << matrix[i] << endl;
}


int num_of_operations(int i, int j)
{
    if (multiply[i][j])
        return multiply[i][j];


    if (i == j)
        return 0;

    if (j == i + 1)
        return matrix[i - 1] * matrix[i] * matrix[j];

    int min = 5000005;

    for (int k = i; k < j; ++ k)
    {
        long long operations = 0;

        multiply[i][k] = num_of_operations(i, k);
        multiply[k + 1][j] = num_of_operations(k + 1, j);

        operations = multiply[i][k] + multiply[k + 1][j]
                        + 1LL * matrix[i - 1] * matrix[k] * matrix[j];

        if (operations < min)
            min = operations;
    }

    multiply[i][j] = min;
    return min;
}

int main()
{
    read();

    fout << num_of_operations(1, n);
    // print();
    return 0;
}