Cod sursa(job #2652824)

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

using namespace std;

struct mat {
    int n, m;
};

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

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];
    }
    int min = 1e9;
    for (int k = i;k < j;++k) {
        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);
    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;
}