Cod sursa(job #2652829)

Utilizator irimia_alexIrimia Alex irimia_alex Data 25 septembrie 2020 22:33:20
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct mat {
    long long int n, m;
};

vector<mat> v;
vector<vector<long long int>> d;

long long int mul(int i, int j) {
    if (d[i][j] != -1) return d[i][j];
    if (i == j) { 
        d[i][j] = 0;
        return 0;
    }
    if (j == i + 1) {
        d[i][j] = v[i].n * v[i].m * v[j].m;
        return d[i][j];
    }
    long long int min = 1e15;
    for (int k = i;k < j;++k) {
        long long int nr = mul(i, k) + v[i].n * v[k].m * v[j].m + mul(k + 1, j);
        if (nr < min) min = nr;
    }
    d[i][j] = min;
    return min;
}

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

    int n;
    fin >> n;
    d.resize(n);
    for (int i = 0;i < n;++i)
        d[i].resize(n, -1);
    long long int x, y;
    fin >> x >> y;
    n -= 1;
    v.push_back({ x,y });
    while (n--) {
        fin >> y;
        v.push_back({ v.back().m,y });
    }

    fout << mul(0, v.size() - 1);

    return 0;
}