Cod sursa(job #3346686)

Utilizator marius.popa1408Popa Marius marius.popa1408 Data 15 martie 2026 00:04:12
Problema Parantezare optima de matrici Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
/*
A1 A2 A3 .... A5




*/

#include <limits>
#include <vector>
#include <fstream>

using namespace std;

const auto INF = numeric_limits<unsigned long long>::max();

long long solve_podm(int n, vector<int> &d) {
    vector<vector<unsigned long long>> dp(n + 1, vector<unsigned long long> (n + 1, INF));

    for (int i = 1; i <= n; i++) {
        dp[i][i] = 0ULL;
    }

    for (int i = 1; i < n; i++) {
        dp[i][i + 1] = 1ULL * d[i - 1] * d[i] * d[i + 1];
    }

    // cazul general
    unsigned long long new_sol;
    
    for (int len = 3; len <= n; len++) {
        for (int i = 1; i < n; i++) {
            int j = i + len - 1;

            for (int k = i; k < j; k++) {
                new_sol = dp[i][k] + dp[k + 1][j] + 1ULL * d[i - 1] * d[k] * d[j];
                if (new_sol < dp[i][j]) {
                    dp[i][j] = new_sol;
                }
            }
        }
    }

    return dp[1][n];

}

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

    int n;
    fin >> n;

    vector<int> d(n + 1);
    for (int i = 0; i <= n; i++) {
        fin >> d[i];
    }

    fout << solve_podm(n, d);
}