Pagini recente » Cod sursa (job #478796) | Cod sursa (job #258454) | Cod sursa (job #2663081) | Cod sursa (job #1192782) | Cod sursa (job #2652825)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct mat {
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 = 1e9;
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);
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;
}