Pagini recente » Cod sursa (job #128379) | Cod sursa (job #2360154) | Cod sursa (job #1323014) | Cod sursa (job #3247059) | Cod sursa (job #2224292)
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
const string IN_FILE = "podm.in";
const string OUT_FILE = "podm.out";
const int64_t INF = 1LL << 60;
int64_t solve(const vector<int>& sizes) {
const int n = int(sizes.size());
auto dp = vector<vector<int64_t>>(n, vector<int64_t>(n, INF));
for (int i = 0; i + 1 < n; i++) {
dp[i][i + 1] = 0;
}
for (int len = 3; len <= n; len++) {
for (int i = 0, j = len - 1; j < n; i++, j++) {
for (int k = i + 1; k < j; k++) {
const int64_t cost = 1LL * sizes[i] * sizes[k] * sizes[j];
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + cost);
}
}
}
return dp[0][n - 1];
}
vector<int> readSizes() {
ifstream in(IN_FILE);
int n;
in >> n;
auto sizes = vector<int>(n + 1);
for (int i = 0; i <= n; i++) {
in >> sizes[i];
}
in.close();
return sizes;
}
void writeOutput(const int64_t result) {
ofstream out(OUT_FILE);
out << result << "\n";
out.close();
}
int main() {
const auto sizes = readSizes();
const int64_t result = solve(sizes);
writeOutput(result);
return 0;
}