Cod sursa(job #3366843)

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

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

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

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

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

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

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

    for(int i = 2; i <= n - 1; ++i) {
        dp[i][i + 1] = std::min(
            dp[i][i + 1],
            a[i - 1] * a[i] * a[i + 1]
        );
    }
    
    for(int d = 2; d < n; ++d) {
        for(int i = 2; i <= n - d; ++i) {
            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;
}