Cod sursa(job #3272456)

Utilizator AlexPlesescuAlexPlesescu AlexPlesescu Data 29 ianuarie 2025 14:49:14
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;
#define int long long int 
#define pb push_back
#define sz(x) (int)(x.size())
#define all(a) a.begin(), a.end()
#define nl '\n'
const int N = 550, mod = 100003, INF = 1e9;

int n, d[N], dp[N][N];
pair<int, int> w[N];

signed main() {
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);
    cin >> n;
    for (int i = 1; i <= n + 1; i++) {
        cin >> d[i];
    }
    for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
            dp[i][j] = INF;
        }
    }
    int m = 0;
    for (int i = 2; i <= n + 1; i++) {
        m++;
        w[m] = {d[i - 1], d[i]};
    }
    for (int len = 2; len <= n; len++) {
        for (int i = 1; i <= n - len + 1; i++) {
            int j = i + len - 1;
            for (int k = i; k < j; k++) {
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + w[i].first * w[k].second * w[j].second);
            }
        }
    }
    cout << dp[1][n];
}