Pagini recente » Cod sursa (job #2919419) | Cod sursa (job #2493586) | Cod sursa (job #2324475) | Cod sursa (job #861834) | Cod sursa (job #1605725)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
const int NMAX = (1<<9);
const long long INF = 0x7fffffffffffffff;
typedef long long in64;
int n;
in64 d[NMAX]; //M[i] = (d[i - 1], d[i])
in64 best[NMAX][NMAX];//best[i][j] = nr minim de inmutiri pentru realizarea inmultirii (Mi * Mi+1 * ... Mj)
int main() {
fin >> n;
for(int i = 0 ; i <= n; ++i)
fin >> d[i];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
best[i][j] = INF;
for(int i = 1; i <= n; ++i)
best[i][i] = 0, best[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
for(int dim = 2; dim <= n - 1; ++dim) {//calculam toate inmutilirile de fix d + 1 matrici
for(int i = 1; i <= n - dim ; ++i) { //incepand de la amtriciea i
int last = i + dim;
for(int inter = i ; inter <= last - 1; ++inter) { //la inmultirea finala
best[i][last] = min(best[i][last], best[i][inter] + best[inter + 1][last] + d[i - 1] * d[inter] * d[last]);
}
}
}
fout << best[1][n] << '\n';
return 0;
}