Pagini recente » Cod sursa (job #3131938) | Cod sursa (job #805445) | Cod sursa (job #416084) | Cod sursa (job #2039072) | Cod sursa (job #2884416)
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
#include <iostream>
int64_t Solve(const vector<int64_t>& d) {
int n = d.size() - 1;
vector<vector<int64_t>> dp(n+1, vector<int64_t>(n+1, 1LL << 60));
for (int i = 1; i <= n; i += 1) {
dp[i][i] = 0;
}
for (int i = 1; i <= n - 1; i += 1) {
dp[i][i+1] = d[i-1] * d[i] * d[i+1];
}
for (int len = 2; len <= n; len += 1) {
for (int i = 1; i + len - 1 <= n; i += 1) {
auto j = i + len - 1;
for (int k = i; k < j; k += 1) {
dp[i][j] = min(
dp[i][j],
dp[i][k] + dp[k+1][j] + d[i-1]*d[k]*d[j]
);
}
}
}
return dp[1][n];
}
int main() {
ifstream fin("podm.in");
ofstream fout("podm.out");
int n;
fin >> n;
vector<int64_t> d(n + 1);
for (auto& num : d) {
fin >> num;
}
auto res = Solve(d);
fout << res << "\n";
return 0;
}