Cod sursa(job #2176457)

Utilizator pakistanezuPopescu Alexandru Gabriel pakistanezu Data 17 martie 2018 14:28:58
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <cstring>

#define MAX 1000000000000LL //10.000 ^ 3
int d[501], dp[501][501];
int main() {
    std::ifstream f("podm.in");
    std::ofstream g("podm.out");

    int n;
    f >> n;
    for (int i = 0; i <= n; ++i) {
        f >> d[i];
    }
    for  (int diag = 1; diag <= n; ++diag) {
        for (int i = 1; i <= n + 1 - diag; ++i) {
            if (diag == 1) {
                dp[i][i] = 0;
                continue;
            }
            if (diag == 2) {
                dp[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
                continue;
            }
            dp[i][i + diag - 1] = MAX;
            for (int k = i; k < i + diag - 1; ++k) {
                dp[i][i + diag - 1] = std::min(dp[i][i + diag - 1],
                            dp[i][k] + dp[k + 1][i + diag - 1] +
                            d[i - 1] * d[k] * d[i + diag - 1]);
            }
        }
    }
    g <<  dp[1][n];

    f.close();
    g.close();
    return 0;
}