Pagini recente » Cod sursa (job #1502398) | Cod sursa (job #2934831) | Cod sursa (job #2258174) | Cod sursa (job #1033680) | Cod sursa (job #1234829)
#include <fstream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<unsigned long long> dim;
int n;
std::ifstream f("podm.in");
std::ofstream g("podm.out");
f >> n;
dim.reserve(n + 1);
for (int i = 0; i <= n; ++i){
unsigned long long x;
f >> x;
dim.push_back(x);
}
std::vector<std::vector<unsigned long long> > best;
best.reserve(n);
for (int i = 0; i < n; ++i) {
best.push_back(std::vector<unsigned long long>());
best[i].reserve(n);
for (int j = 0; j < n; ++j){
if(j == i + 1)
best[i].push_back(dim[i] * dim[j] * dim[j + 1]);
else if (i == j)
best[i].push_back(0);
else
best[i].push_back((unsigned long long)-1);
}
}
for (int d = 2; d < n; ++d) {
for (int i = 0; i < n - d; ++i) {
for (int k = i; k < i + d; ++k) {
best[i][i + d] = std::min(best[i][i + d], best[i][k] + best[k + 1][i + d] + dim[i] * dim[k + 1] * dim[i + d + 1]);
}
}
}
g << best[0][n-1] << "\n";
f.close();
g.close();
return 0;
}