Cod sursa(job #2884416)

Utilizator preda.andreiPreda Andrei preda.andrei Data 3 aprilie 2022 13:20:04
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;

#include <iostream>
int64_t Solve(const vector<int64_t>& d) {
    int n = d.size() - 1;
    vector<vector<int64_t>> dp(n+1, vector<int64_t>(n+1, 1LL << 60));

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

    for (int len = 2; len <= n; len += 1) {
        for (int i = 1; i + len - 1 <= n; i += 1) {
            auto j = i + len - 1;

            for (int k = i; k < j; k += 1) {
                dp[i][j] = min(
                    dp[i][j],
                    dp[i][k] + dp[k+1][j] + d[i-1]*d[k]*d[j]
                );
            }
        }
    }
    return dp[1][n];
}

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

    int n;
    fin >> n;

    vector<int64_t> d(n + 1);
    for (auto& num : d) {
        fin >> num;
    }

    auto res = Solve(d);
    fout << res << "\n";

    return 0;
}