Cod sursa(job #2678131)

Utilizator mex7Alexandru Valentin mex7 Data 28 noiembrie 2020 10:42:14
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define ll long long
#define cin fin
#define cout fout
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
ll v[550], dp[550][550];

int main() {
    int n;

    cin >> n;
    for (int i = 0; i <= n; i++)
        cin >> v[i];

    for (int i = 1; i < n; i++)
        for (int add = 1; add <= n - i; add++)
            dp[i][i + add] = INT_MAX;

    for (int i = 1; i < n; i++)
        dp[i][i + 1] = v[i - 1] * v[i] * v[i + 1];

    for (int add = 2; add < n; add++)
        for (int ind = 1; ind <= n - add; ind++)
            for (int j = ind + 1; j <= ind + add; j++) {
                dp[ind][add + ind] = min(dp[ind][add + ind], dp[ind][j - 1] + dp[j][ind + add] + v[ind - 1] * v[ind + add] * v[j - 1]);
            //    cout << "add: " << add << '\n' << "ind: " << ind << '\n' << "j: " << j << '\n' << "CURRENT TOTAL " << dp[ind][j - 1] + dp[j][ind + add] + v[ind - 1] * v[ind + add] * v[j - 1] << '\n';
            }

    cout << dp[1][n];

    return 0;
}