Pagini recente » Cod sursa (job #898793) | Cod sursa (job #1918826) | Cod sursa (job #2557465) | Cod sursa (job #829473) | Cod sursa (job #2740423)
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int main() {
int N;
int i, j;
fin >> N;
vector<int> dim(N + 1);
vector<vector<ull>> dp(N + 1, vector<ull>(N + 1));
for (i = 0; i <= N; ++i) {
fin >> dim[i];
}
// base cases
for (i = 1; i < N; ++i) {
dp[i][i] = 0;
dp[i][i + 1] = 1ULL * dim[i - 1] * dim[i] * dim[i + 1];
}
dp[N][N] = 0;
/**
* dp[i][j = i + d] = min{dp[i][k] + dp[k + 1][j] + dim[i - 1] * dim[k] * dim[j]}
* -- M_ij = M_ik * M_(k + 1)j
*/
int d, k;
for (d = 1; d < N; ++d) {
for (i = 1; i <= N - d; ++i) {
j = i + d;
dp[i][j] = ULLONG_MAX;
ull lr = 1ULL * dim[i - 1] * dim[j];
for (k = i; k < j; ++k) {
ull aux;
aux = 0ULL + dp[i][k] + dp[k + 1][j] +
(1ULL * lr * dim[k]);
dp[i][j] = min(dp[i][j], aux);
}
}
}
fout << dp[1][N] << "\n";
return 0;
}