Cod sursa(job #2876023)

Utilizator robpan38Pandele Robert Andrei robpan38 Data 22 martie 2022 21:09:42
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

unsigned long long podm(int n, vector<int> d) {
    vector<vector<unsigned long long>> dp(n + 1, vector<unsigned long long>(n + 1, ULLONG_MAX));

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

    for(int i = 1; i < n; i++) {
        dp[i][i+1] = 1ULL * d[i - 1] * d[i] * d[i + 1];
    }

    for(int len = 2; len <= n; len++) {
        for(int i = 1; i + len - 1 <= n; i++) {
            int j = i + len - 1;

            for(int k = i; k < j; k++) {
                unsigned long long aux = 1ULL * dp[i][k] + dp[k + 1][j] + d[i - 1] * d[k] * d[j];
                if(dp[i][j] > aux) {
                    dp[i][j] = aux;
                }
            }
        }
    }

    return dp[1][n];
}

int main() {
    ifstream in("podm.in");
    ofstream out("podm.out");

    int n;
    in >> n;
    vector<int> d;

    for(int i = 1; i <= n + 1; i++) {
        int x;
        in >> x;
        d.push_back(x);
    }

    out << podm(n, d);
}