Cod sursa(job #2493292)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 16 noiembrie 2019 11:24:07
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <climits>
#include <algorithm>
#define ll long long

using namespace std;

const int MAXN = 510;
ifstream fin("podm.in");
ofstream fout("podm.out");

ll dim[MAXN], dp[MAXN][MAXN];
int n;

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

void solve() {
    for (int i = 1; i < n; ++i)
        dp[i][i + 1] = dim[i - 1] * dim[i] * dim[i + 1];
    for (int d = 2; d <= n; ++d) {
        for (int k = 1; k <= n - d; ++k) {
            dp[k][k + d] = LLONG_MAX;
            for (int i = k; i < k + d; ++i)
                dp[k][k + d] = min(dp[k][k + d], dp[k][i] + dp[i + 1][k + d] + dim[k - 1] * dim[i] * dim[k + d]);
        }
    }
}

int main() {
    read();
    solve();
    fout << dp[1][n];
    return 0;
}