Pagini recente » Cod sursa (job #2203804) | Cod sursa (job #2129779) | Cod sursa (job #734528) | Cod sursa (job #1684143) | Cod sursa (job #1556384)
#include <fstream>
#include <numeric>
#include <algorithm>
using namespace std;
const int MAX_N = 500;
const long long INF = numeric_limits <long long> :: max();
int v[MAX_N + 1];
long long D[MAX_N + 1][MAX_N + 1];
long long memo(int st, int fn)
{
if (D[st][fn] != INF)
return D[st][fn];
if (st == fn)
return D[st][fn] = 0;
if (fn == st + 1)
return D[st][fn] = v[st - 1] * v[st] * v[st + 1];
for (int k = st; k < fn; k++)
D[st][fn] = min(memo(st, k) + memo(k + 1, fn) + 1LL * v[st - 1] * v[k] * v[fn], D[st][fn]);
return D[st][fn];
}
int main(void)
{
ifstream in("podm.in");
ofstream out("podm.out");
in.tie(0);
ios_base::sync_with_stdio(0);
int N;
in >> N;
for (int i = 0; i <= N; i++)
in >> v[i];
in.close();
for (int i = 0; i <= N; i++)
for (int j = 0; j <= N; j++)
D[i][j] = INF;
out << memo(1, N) << '\n';
out.close();
return 0;
}