Cod sursa(job #1390671)

Utilizator crucerucalinCalin-Cristian Cruceru crucerucalin Data 17 martie 2015 11:05:21
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>


int main()
{
    std::ifstream fin{"podm.in"};
    std::ofstream fout{"podm.out"};

    int N;
    fin >> N;

    std::vector<int> dims(N + 1);
    for (auto &elem : dims)
        fin >> elem;

    std::vector<std::vector<long long>> M(N + 1, std::vector<long long>(N + 1, 0));
    for (auto d = 1; d < N; ++d)
        for (auto i = 1; i + d <= N; ++i) {
            auto minn = std::numeric_limits<long long>::max();
            for (auto k = i; k < i + d; ++k)
                minn = std::min(
                    minn, M[i][k] + M[k+1][i+d] + 1LL* dims[i-1]*dims[k]*dims[i+d]);
            M[i][i+d] = minn;
        }

    fout << M[1][N] << std::endl;
    return 0;
}