Cod sursa(job #2881991)

Utilizator the4Designerthe4Designer the4Designer Data 31 martie 2022 08:56:14
Problema Parantezare optima de matrici Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;

#define INF LLONG_MAX

int main(void) {
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);

    int n; cin >> n;
    long long dims[502] = {0};

    for (int i = 1; i <= n + 1; ++i) {
        cin >> dims[i];
    }

    long long dp[501][501];
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            dp[i][j] = INF;
        }
    }

    // base
    for (int i = 1; i <= n; ++i) {
        dp[i][i] = 0;
        dp[i][i + 1] = dims[i + 1] * dims[i] * dims[i + 2];
    }

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            // get the best cut

            for (int k = 1; k <= n; ++k) {
                if (dp[k + 1][j] == INF || dp[i][k] == INF) {
                    ;
                } else {
                    dp[i][j] = min(dp[i][j],
                                dp[i][k] + dp[k + 1][j] + 
                                dims[i] * dims[k + 1] * dims[j + 1]);
                }
            }
        }
    }

    cout << dp[1][n];

    return 0;
}