Cod sursa(job #1767268)

Utilizator preda.andreiPreda Andrei preda.andrei Data 28 septembrie 2016 21:13:40
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <vector>

using namespace std;

typedef long long lint;

const lint kInfinit = (1LL << 60);

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

    int n;
    fin >> n;

    vector<lint> dim(n + 1);
    vector<vector<lint>> prod(n + 1, vector<lint>(n + 1, 0));
    for (int i = 0; i <= n; ++i)
        fin >> dim[i];

    for (int l = 1; l < n; ++l) {
        for (int i = 1; i <= n - l; ++i) {
            prod[i][i + l] = kInfinit;
            for (int k = i; k < i + l; ++k) {
                lint cost_nou = prod[i][k] + prod[k + 1][i + l] + dim[i - 1] * dim[k] * dim[i + l];
                prod[i][i + l] = min(prod[i][i + l], cost_nou);
            }
        }
    }

    fout << prod[1][n] << "\n";
    return 0;
}