Cod sursa(job #2741896)

Utilizator DragosC1Dragos DragosC1 Data 19 aprilie 2021 18:13:15
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <iostream>
using namespace std;

int n;
long long dp[502][502], d[502];

const long long Inf = 1e17;

void read() {
    int i;
    ifstream f("podm.in");
    f >> n;
    for (i = 0; i <= n; i++) 
        f >> d[i];
    f.close();
}

void solve() {
    int i, j, k, lin, col;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++) 
            dp[i][j] = Inf;
    for (i = 1; i <= n; i++)
        dp[i][i] = 0;
    for (i = 2; i <= n; i++) 
        for (j = 1; j <= n - i + 1; j++) {
            lin = j; col = i + j - 1;  
            for (k = lin; k < col; k++) 
                dp[lin][col] = min(dp[lin][col], dp[lin][k] + dp[k + 1][col] + 1LL * d[lin - 1] * d[k] * d[col]);
        }
}

void output() {
    ofstream g("podm.out");
    g << dp[1][n];
    g.close();
}

int main() {
    read();
    solve();
    output();
    return 0;
}