Pagini recente » Cod sursa (job #3347200) | Cod sursa (job #42620) | Cod sursa (job #825435) | Cod sursa (job #1541583) | Cod sursa (job #3346689)
/*
A1 A2 A3 .... A5
*/
#include <limits>
#include <vector>
#include <fstream>
using namespace std;
const auto INF = numeric_limits<unsigned long long>::max();
long long solve_podm(int n, vector<int> &d) {
vector<vector<unsigned long long>> dp(n + 1, 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];
}
// cazul general
unsigned long long new_sol;
for (int len = 3; len <= n; len++) {
for (int i = 1; i <= n - len + 1; i++) {
int j = i + len - 1;
for (int k = i; k < j; k++) {
new_sol = dp[i][k] + dp[k + 1][j] + 1ULL * d[i - 1] * d[k] * d[j];
if (new_sol < dp[i][j]) {
dp[i][j] = new_sol;
}
}
}
}
return dp[1][n];
}
int main() {
ifstream fin("podm.in");
ofstream fout("podm.out");
int n;
fin >> n;
vector<int> d(n + 1);
for (int i = 0; i <= n; i++) {
fin >> d[i];
}
fout << solve_podm(n, d);
}