Pagini recente » Cod sursa (job #2618722) | Cod sursa (job #2249418) | Cod sursa (job #1863472) | Cod sursa (job #591438) | Cod sursa (job #2652824)
#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;
}