Cod sursa(job #2648418)

Utilizator gabrielmGabriel Majeri gabrielm Data 10 septembrie 2020 19:10:42
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <climits>
#include <fstream>

using namespace std;

uint64_t dim[1024];
uint64_t costMinim[1024][1024];

int main() {
    ifstream in("podm.in");

    int n;
    in >> n;

    for (int i = 0; i <= n; ++i) {
        in >> dim[i];
    }

    // Costul produsul format dintr-o singură matrice
    for (int i = 1; i <= n; ++i) {
        costMinim[i][i] = 0;
    }

    // Costul produsului a două matrici adiacente
    for (int i = 1; i <= n; ++i) {
        costMinim[i][i + 1] = dim[i - 1] * dim[i] * dim[i + 1];
    }

    /// Costul unui produs de lungime l
    for (int l = 2; l < n; ++l) {
        for (int i = 1; i <= n - l; ++i) {
            int j = i + l;
            uint64_t valMinim = UINT64_MAX;
            for (int k = i; k < j; ++k) {
                uint64_t val = costMinim[i][k] + costMinim[k + 1][j] + dim[i - 1] * dim[k] * dim[j];
                valMinim = min(valMinim, val);
            }
            costMinim[i][j] = valMinim;
        }
    }

    ofstream out("podm.out");
    out << costMinim[1][n] << '\n';
}