Cod sursa(job #3346573)

Utilizator elisa_elena.arghirArghir Elisa elisa_elena.arghir Data 14 martie 2026 12:21:03
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<climits>
using namespace std;

int main() {
    ifstream fin("podm.in");
    int n, i, j, k;

    fin >> n;

    //matricea dp[i][j] - in care retin inmultirile pe fiecare subinterval i....j
    vector<int> d(n + 1);
    vector<vector<int>> dp(n + 1, vector<int>(n + 1));

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

    for (i = 0; i <= n; i++)
        dp[i][i] = 0;
    
    //len = lungimea intervalului i..j pe care vrem sa l calculam
    //len este chiar j - i + 1, care necesita sa l calculam numai cand lungimea sa e >= 2
    //i startul intervaluiui
    //len = j - i + 1 => j = i + len - 1 (sfarsitul intervalului)
    //i + len - 1 <= n rezulta ca i <= n - len + 1
    for (int len = 2; len <= n; len++) {
        for (i = 1; i <= n - len + 1; i++) {
            j = i + len - 1;
            dp[i][j] = INT_MAX;
            for (k = i; k <= j - 1; k++)
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + d[i - 1] * d[k] * d[j]);
        }
    }

    ofstream fout("podm.out");
    fout << dp[1][n];
    fout.close();
}