Cod sursa(job #3322319)

Utilizator ItsHezovPahonie George Alessio ItsHezov Data 13 noiembrie 2025 14:13:57
Problema Parantezare optima de matrici Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>

using namespace std;
typedef long long ll;
const ll mxN = 500, INF = 1e17;
//1. dp[st][dr] = nr minim de inmultiri pt A_st * ... A_dr
ll d[mxN+2], dp[mxN+1][mxN+1];
int main()
{
    int n ;
    cin >> n;
    for(int i = 1;i<=n+1;i++)
        cin >> d[i];
    //2. Cazuri de baza
    for(int i = 1;i<=n;i++)
        for(int j = 1;j<=n;j++)
            dp[i][j] = INF;
    // len = 1
    for(int i = 1;i<=n;i++)
        dp[i][i] = 0;
    // len = 2
    for(int i = 1;i<n;i++)
        dp[i][i+1] = d[i] * d[i+1] * d[i+2];
    // 3. Tranzitii
    for(int len = 3;len<=n;len++)
        for(int dr = len;dr <= n;dr++)
        {
            int st = dr - len + 1;
            for(int k = st;k<=dr-1;k++)
            {
                ll costK = dp[st][k] +
                           dp[k+1][dr] +
                           d[st] * d[k + 1] * d[dr+1];
                dp[st][dr] = min(dp[st][dr], costK);
            }

        }
    // 4. Raspuns
    cout << dp[1][n] << '\n';
    return 0;
}