Cod sursa(job #2718441)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 8 martie 2021 19:08:46
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

const int NMax = 5 * 1e2;
const long long oo = 1e17;

int n;
long long d[NMax + 5], dp[NMax + 5][NMax + 5];

void Read(){
    fin >> n;
    for (int i = 0; i <= n; i++)
        fin >> d[i];
}

void DP(){
    for (int i = 1; i < n; i++)
        dp[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
    for (int diff = 2; diff < n; diff++)
        for (int i = 1; i + diff <= n; i++){
            long long minvalue = oo;
            for (int j = i + 1; j <= i + diff; j++)
                if (dp[i][j - 1] + dp[j][i + diff] + d[i - 1] * d[j - 1] * d[i + diff] < minvalue)
                    minvalue = dp[i][j - 1] + dp[j][i + diff] + d[i - 1] * d[j - 1] * d[i + diff];
            dp[i][i + diff] = minvalue;
        }
}

void Print(){
    fout << dp[1][n] << '\n';
}

int main(){
    Read();
    DP();
    Print();
    return 0;
}