Cod sursa(job #3233218)

Utilizator MirceaDonciuLicentaLicenta Mircea Donciu MirceaDonciuLicenta Data 2 iunie 2024 19:58:40
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

int main() {
    ifstream infile("podm.in");
    ofstream outfile("podm.out");

    if (!infile || !outfile) {
        cerr << "Error opening file" << endl;
        return 1;
    }

    int n;
    infile >> n;

    vector<int> p(n + 1);
    for (int i = 0; i <= n; ++i) {
        infile >> p[i];
    }

    vector<vector<long long>> m(n, vector<long long>(n, 0));

    for (int l = 2; l <= n; ++l) {
        for (int i = 0; i <= n - l; ++i) {
            int j = i + l - 1;
            m[i][j] = LLONG_MAX;
            for (int k = i; k < j; ++k) {
                long long q = m[i][k] + m[k + 1][j] + static_cast<long long>(p[i]) * p[k + 1] * p[j + 1];
                if (q < m[i][j]) {
                    m[i][j] = q;
                }
            }
        }
    }

    outfile << m[0][n - 1] << endl;

    infile.close();
    outfile.close();

    return 0;
}