Pagini recente » Sedinta 2008-11-25 | Ședință 2009-10-23 | Cod sursa (job #2340640) | Ședință 2009-10-23 | Cod sursa (job #1383642)
#include <iostream>
#include <fstream>
#include <limits>
using namespace std;
const int MAXN = 505;
int matrix_chain_order(int n, int d[]) {
int m[MAXN][MAXN], s[MAXN][MAXN];
for (int i = 1; i <= n; i++) {
m[i][i] = 0;
}
for (int l = 2; l <= n; l++) {
for (int i = 1; i <= n - l + 1; i++) {
int j = i + l - 1;
m[i][j] = numeric_limits<int>::max();
for (int k = i; k <= j - 1; k++) {
int q = m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j];
if (m[i][j] > q) {
m[i][j] = q;
s[i][j] = k;
}
}
}
}
return m[1][n];
}
int main()
{
freopen("podm.in", "r", stdin);
freopen("podm.out", "w", stdout);
int n, d[MAXN];
cin >> n;
for (int i = 0; i <= n; i++)
cin >> d[i];
cout << matrix_chain_order(n, d);
return 0;
}