Pagini recente » Cod sursa (job #2187259) | Cod sursa (job #2892355) | Cod sursa (job #882330) | Cod sursa (job #2832043) | Cod sursa (job #2155700)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define MAXN 500
//#define MIN_INIT 10000000000000000
int n;
std::vector<int> d;
long long dp[MAXN + 1][MAXN + 1];
long long solve_podm() {
int j;
long long minNumMul;
//dp[0][0] = 0;
for (int diag = 2; diag <= n; diag++) {
for (int i = 1; i <= n - diag + 1; i++) {
j = diag + i - 1;
if (j == i) {
dp[i][j] = 0;
}
else if (j == i + 1) {
dp[i][j] = 1LL * d[i - 1] * d[i] * d[i + 1];
}
else {
minNumMul = LLONG_MAX;
for (int k = i; k <= j - 1; k++) {
minNumMul = std::min(minNumMul,
dp[i][k] + dp[k + 1][j] + d[i - 1] * d[k] * d[j]);
}
dp[i][j] = minNumMul;
}
}
}
return dp[1][n];
}
int main(void) {
FILE *fin = fopen("podm.in", "r");
fscanf(fin, "%d", &n);
for (int i = 0, e; i <= n; i++) {
fscanf(fin, "%d", &e);
d.push_back(e);
}
fclose(fin);
FILE *fout = fopen("podm.out", "w");
fprintf(fout, "%lld\n", solve_podm());
fclose(fout);
return 0;
}