Pagini recente » Cod sursa (job #2917947) | Cod sursa (job #1579199) | Cod sursa (job #2197338) | Cod sursa (job #1549407) | Cod sursa (job #2663185)
#include <iostream>
#include <fstream>
#include <algorithm>
const int NMAX = 5e2;
const int64_t INF = 1e16;
int n;
int64_t v[1 + NMAX];
int64_t dp[1 + NMAX][1 + NMAX];
void read() {
std::ifstream in("podm.in");
in >> n;
for (int i = 1; i <= n + 1; ++i)
in >> v[i];
}
int main() {
read();
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j)
dp[i][j] = INF;
dp[i][i] = 0;
}
/*
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
for (int k = i; k <= j - 1; ++k)
dp[i][j] = std::min(dp[i][j], dp[i][k] + v[i] * v[k + 1] * v[j + 1] + dp[k + 1][j]);
}
}
//*/
for (int len = 2; len <= n; ++len) {
for (int i = 1; i <= n - len + 1; ++i) {
int j = i + len - 1;
for (int k = i; k <= j - 1; ++k)
dp[i][j] = std::min(dp[i][j], dp[i][k] + v[i] * v[k + 1] * v[j + 1] + dp[k + 1][j]);
}
}
/*
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j)
std::cout << (dp[i][j] == INF ? "inf" : std::to_string(dp[i][j])) << ' ';
std::cout << '\n';
}
//*/
std::ofstream out("podm.out");
out << dp[1][n];
return 0;
}