Pagini recente » Cod sursa (job #3335708) | Cod sursa (job #3317754) | Cod sursa (job #3326896) | Cod sursa (job #3318983) | Cod sursa (job #3350123)
#include <fstream>
#include <iostream>
#include <limits>
#include <vector>
std::ifstream fin("podm.in");
std::ofstream fout("podm.out");
const auto INF = std::numeric_limits<unsigned long long>::max();
class Solution {
public:
unsigned long long solve_podm(int n, const std::vector<int> &d) {
std::vector<std::vector<unsigned long long>> dp(
n + 1, std::vector<unsigned long long>(n + 1, INF));
for (int i = 1; i <= n; i++) {
dp[i][i] = 0ULL;
}
for (int i = 1; i < n; i++) {
dp[i][i + 1] = 1ULL * d[i - 1] * d[i] * d[i + 1];
}
for (int j = 2; j <= n; j++) {
for (int i = 1; i + j - 1 <= n; i++) {
int k = i + j - 1;
for (int t = i; t < k; t++) {
unsigned long long new_sol =
dp[i][t] + dp[t + 1][k] + 1ULL * d[i - 1] * d[t] * d[k];
dp[i][k] = std::min(dp[i][k], new_sol);
}
}
}
return dp[1][n];
}
};
int main() {
int n;
fin >> n;
std::vector<int> d(n + 1);
for (int i = 0; i <= n; i++) {
fin >> d[i];
}
Solution sol;
unsigned long long ans = sol.solve_podm(n, d);
fout << ans;
}