Cod sursa(job #1869090)

Utilizator preda.andreiPreda Andrei preda.andrei Data 5 februarie 2017 16:17:52
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;

typedef long long int64;

const int64 kInfinite = (1LL << 50);

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

    int n;
    fin >> n;

    vector<pair<int, int>> dim(n);
    fin >> dim[0].first >> dim[0].second;
    for (int i = 1; i < n; ++i) {
        dim[i].first = dim[i - 1].second;
        fin >> dim[i].second;
    }

    vector<vector<int64>> d(n, vector<int64>(n, kInfinite));
    for (int i = 0; i < n; ++i) {
        d[i][i] = 0;
    }

    for (int len = 2; len <= n; ++len) {
        for (int i = 0; i <= n - len; ++i) {
            int lim = i + len - 1;
            for (int j = i; j < lim; ++j) {
                d[i][lim] = min(d[i][lim],  d[i][j] + d[j + 1][lim] +
                                dim[i].first * dim[j].second * dim[lim].second);
            }
        }
    }

    fout << d[0].back() << "\n";
    return 0;
}