Cod sursa(job #2813852)

Utilizator SmauSmau George Robert Smau Data 7 decembrie 2021 11:49:55
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

#define NMAX 512
#define INF 100000000000000000ULL

using namespace std;

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

unsigned long long int pd[NMAX][NMAX], d[NMAX];
int n;

int main() {
    fin >> n;

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

    for(int i = 1; i <= n; i ++)
        pd[i][i] = 0;
    for(int i = 1; i < n; i ++)
        pd[i][i + 1] = d[i - 1] * d[i] * d[i + 1];

    for(int diff = 2; diff < n; diff ++)
        for(int i = 1; i < n; i ++) {
            int j = min(i + diff, n);
            pd[i][j] = INF;

            for(int k = i; k < j; k ++)
                pd[i][j] = min(pd[i][j], pd[i][k] + pd[k + 1][j] + d[i - 1] * d[k] * d[j]);
        }

    fout << pd[1][n] << '\n';

    // for(int i = 1; i <= n; i ++, fout << '\n')
    //     for(int j = 1; j <= n; j ++) fout << pd[i][j] << ' ';

    return 0;
}