Pagini recente » Cod sursa (job #1928304) | Istoria paginii runda/huehuhue/clasament | Cod sursa (job #2166778) | Istoria paginii runda/oni/clasament | Cod sursa (job #2120523)
#include <cstdint>
#include <fstream>
#include <vector>
using namespace std;
int64_t Solve(const vector<int> &dim)
{
int count = dim.size() - 1;
vector<vector<int64_t>> cost(count, vector<int64_t>(count));
for (int i = 0; i < count; ++i) {
cost[i][i] = 0;
if (i > 0) {
cost[i - 1][i] = 1LL * dim[i - 1] * dim[i] * dim[i + 1];
}
}
for (int len = 3; len <= count; ++len) {
for (int i = 0; i + len - 1 < count; ++i) {
auto end = i + len - 1;
cost[i][end] = (1LL << 50);
for (int j = i; j < end; ++j) {
auto new_cost = cost[i][j] + cost[j + 1][end];
new_cost += 1LL * dim[i] * dim[j + 1] * dim[end + 1];
cost[i][end] = min(cost[i][end], new_cost);
}
}
}
return cost[0].back();
}
int main()
{
ifstream fin("podm.in");
ofstream fout("podm.out");
int n;
fin >> n;
vector<int> dim(n + 1);
for (auto &elem : dim) {
fin >> elem;
}
auto res = Solve(dim);
fout << res << "\n";
return 0;
}