Pagini recente » Cod sursa (job #829233) | info-arena 2.0 | Profil CorinaHolom | Cod sursa (job #293608) | Cod sursa (job #3039110)
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
using namespace std;
typedef long long ll;
typedef pair <ll, ll> pii;
const ll NMAX = 501;
const ll INF = 1e9;
const ll nrbits = 17;
const ll MOD = 998244353;
pii v[NMAX];
ll d[NMAX + 1];
ll dp[NMAX][NMAX];
pii r[NMAX][NMAX];
void minSelf(ll &x, ll val){
x = min(x, val);
}
int main() {
//#ifdef HOME
ifstream cin("podm.in");
ofstream cout("podm.out");
//#endif // HOME
ll n, i;
cin >> n;
for(i = 1; i <= n + 1; i++){
cin >> d[i];
if(i > 1){
v[i - 1] = {d[i - 1], d[i]};
r[i - 1][i - 1] = v[i - 1];
}
}
for(i = 1; i <= n - 1; i++){
dp[i][i + 1] = v[i].first * v[i].second * v[i + 1].second;
r[i][i + 1] = {v[i].first, v[i + 1].second};
}
for(ll l = 3; l <= n; l++){
for(ll i = 1; i + l - 1 <= n; i++){
ll j = i + l - 1;
dp[i][j] = dp[i][i + 1] + dp[i + 2][j] + r[i][i + 1].first * r[i][i + 1].second * r[i + 2][j].second;
r[i][j] = {r[i][i + 1].first, r[i + 2][j].second};
for(ll k = i; k < j; k++){
minSelf(dp[i][j], dp[i][k] + dp[k + 1][j] + r[i][k].first * r[i][k].second * r[k + 1][j].second);
}
}
}
cout << dp[1][n];
}