Cod sursa(job #3366844)

Utilizator marelucaMare Luca Ghita mareluca Data 4 octombrie 2026 19:30:50
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

const std::string FILE_NAME = "podm";
std::ifstream fin(FILE_NAME + ".in");
std::ofstream fout(FILE_NAME + ".out");

using ll = long long;

int main() {
    std::ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    int n;
    fin >> n;
    std::vector<ll> a(n + 1);

    for(int i = 0; i <= n; ++i) fin >> a[i];

    // dp[i][j] = numarul minim de inmultiri
    // luand doar subsecventa [i][j] de matrici
    std::vector<std::vector<ll>> dp(n + 1, std::vector<ll>(n + 1, 0));

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

    for(int i = 1; i <= n - 1; ++i) dp[i][i + 1] = a[i - 1] * a[i] * a[i + 1];
    
    for(int d = 2; d < n; ++d) {
        for(int i = 1; i <= n - d; ++i) {
            dp[i][i + d] = LLONG_MAX;
            
            for(int k = i; k < i + d; ++k) {
                dp[i][i + d] = std::min(
                    dp[i][i + d],
                    dp[i][k] + dp[k + 1][i + d] + a[i - 1] * a[k] * a[i + d]
                );
            }
        }
    }

    fout << dp[1][n];
    return 0;
}