Cod sursa(job #3340215)

Utilizator torjexPetrescu Andrei torjex Data 12 februarie 2026 18:48:07
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define int long long

using namespace std;
ifstream cin("podm.in");
ofstream cout("podm.out");

const int NMAX = 505;
const int INF = 1e18;
int mem[NMAX][NMAX], a[NMAX];
bool isCalc[NMAX][NMAX];

int dp(int l, int r) {
    if (l > r) {
        return -1e18;
    }

    if (l == r) {
        return 0;
    }

    if (l == r - 1) {
        return a[l - 1] * a[l] * a[r];
    }

    if (isCalc[l][r]) {
        return mem[l][r];
    }

    isCalc[l][r] = true;
    mem[l][r] = INF;
    for (int k = l; k < r; k++) {
        mem[l][r] = min(mem[l][r], dp(l, k) + dp(k + 1, r) + a[l - 1] * a[k] * a[r]);
    }

    return mem[l][r];
}

signed main() {
    int n; cin >> n;

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

    cout << dp(1, n) << '\n';
}