Pagini recente » Cod sursa (job #341506) | Cod sursa (job #1674906) | Cod sursa (job #1291181) | Cod sursa (job #2840262) | Cod sursa (job #2892196)
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
using namespace std;
// using namespace __gnu_pbds;
// template<typename T>
// using oset = tree<T, null_type, less<T>,
// rb_tree_tag, tree_order_statistics_node_update>;
#define nl cout.put('\n')
using ll = long long;
using ull = unsigned long long;
#ifdef Wi_TEST
template<typename T1, typename T2>
ostream& operator<<(ostream& out, pair<T1,T2> p) {
out << "(" << p.first << ", " << p.second << ")";
out.flush(); return out;
}
void DEB() { cerr << "]" << endl; }
template<typename H, typename ... T>
void DEB(H h, T... t) {
cerr << h;
if(sizeof...(t)) cerr << ", ";
DEB(t...);
}
#define deb(...) cerr << "LINE(" << __LINE__ << ") -> [" << \
#__VA_ARGS__ << "]: [", DEB(__VA_ARGS__)
#else
#define deb(...) 87105
#endif
const long long MOD = 1000000007, MOD2 = 998244353;
int lx[] = {0, 1, 0, -1}, ly[] = {1, 0, -1, 0};
#define N 505
const ll inf = (1LL << 60LL);
ll dp[N][N], d[N];
void solve() {
ifstream fin("podm.in");
ofstream fout("podm.out");
int n;
fin >> n;
for (int i = 0; i <= n; i++)
fin >> d[i];
// dp[i][j] = solutia pentru intervalul [i, j]
// Nota: o matrice k este compusa din d[k-1] si d[k]
for (int deplasare = 1; deplasare < n; ++deplasare) {
for (int i = 1; i + deplasare <= n; ++i) {
const int j = i + deplasare;
dp[i][j] = inf;
for (int k = i; k < j; ++k) {
// Se separa in [i, k] si [k+1, j]
dp[i][j] = min(dp[i][j],
dp[i][k] + dp[k+1][j] +
d[i - 1] * d[k] * d[j]);
}
}
}
fout << dp[1][n];
}
int main() {
ios_base::sync_with_stdio(false);
#ifndef Wi_TEST
cin.tie(0);
#endif
int t = 1;
// cin >> t;
for(int i = 1; i <= t; ++i) {
solve();
}
}