Cod sursa(job #3164585)

Utilizator Cezar211Popoveniuc Cezar Cezar211 Data 3 noiembrie 2023 18:51:14
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int NMAX = 505;

inline void fast() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}

int N;
struct Matrix {
    ll x, y;
};
vector<Matrix> v;

void read() {
    ifstream in("podm.in");
    in >> N;
    v.resize(N);
    ll x;
    in >> x;
    for (int i = 0; i < N; i++) {
        in >> v[i].y;
        v[i].x = x;
        x = v[i].y;
    }
}

ll dp[NMAX][NMAX];

void solve() {
    for (int k = 1; k < N; k++) {
        for (int i = 0; i < N - k; i++) {
            dp[i][i + k] = LLONG_MAX;
            for (int j = i; j <= i + k - 1; j++) {
                assert(v[j].y == v[j + 1].x);
                ll cost = dp[i][j] + dp[j + 1][i + k] + v[i].x * v[j].y * v[i + k].y;
                dp[i][i + k] = min(dp[i][i + k], cost);
            }
        }
    }
    ofstream out("podm.out");
    out << dp[0][N - 1] << '\n';
}

int main() {
    fast();
    read();
    solve();
    return 0;
}