Pagini recente » Cod sursa (job #1044031) | Cod sursa (job #825893) | Cod sursa (job #3134338) | Cod sursa (job #3340212) | Cod sursa (job #3340215)
#include <fstream>
#define int long long
using namespace std;
ifstream cin("podm.in");
ofstream cout("podm.out");
const int NMAX = 505;
const int INF = 1e18;
int mem[NMAX][NMAX], a[NMAX];
bool isCalc[NMAX][NMAX];
int dp(int l, int r) {
if (l > r) {
return -1e18;
}
if (l == r) {
return 0;
}
if (l == r - 1) {
return a[l - 1] * a[l] * a[r];
}
if (isCalc[l][r]) {
return mem[l][r];
}
isCalc[l][r] = true;
mem[l][r] = INF;
for (int k = l; k < r; k++) {
mem[l][r] = min(mem[l][r], dp(l, k) + dp(k + 1, r) + a[l - 1] * a[k] * a[r]);
}
return mem[l][r];
}
signed main() {
int n; cin >> n;
for (int i = 0; i <= n; i++) {
cin >> a[i];
}
cout << dp(1, n) << '\n';
}