Cod sursa(job #3274203)

Utilizator nusuntvictorVictor Stefan nusuntvictor Data 5 februarie 2025 18:11:19
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

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

const int INF = 1e9;
int n, p[502], dp[502][502];

int main() {
    // Citim numarul de matrici
    fin >> n;

    // Citim dimensiunile matricelor
    for (int i = 1; i <= n + 1; ++i)
        fin >> p[i];

    // Inițializăm dp[i][j] cu infinit pentru i ≠ j
    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j)
            dp[i][j] = INF;

    // Programare dinamică: calculăm dp[i][j]
    for (int len = 2; len <= n; ++len) {  // Lungimea subsecvenței
        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] + p[i] * p[k + 1] * p[j + 1]);
            }
        }
    }

    // Scriem rezultatul optim
    fout << dp[1][n] << '\n';
}