Pagini recente » Cod sursa (job #2614652) | Cod sursa (job #1906020) | Cod sursa (job #3184103) | Cod sursa (job #2252177) | Cod sursa (job #1000241)
#include <fstream>
#include <climits>
#define INF 100000000000000000LL
#define MAX 505
int paran(int *A, int nV);
int main()
{
std::ifstream in("podm.in");
std::ofstream out("podm.out");
int nV;
in >> nV;
int *nA = new int[MAX];
for(int i = 0; i <= nV; i++)
in >> nA[i];
out << paran(nA, nV);
return 0;
}
int paran(int *A, int nV)
{
long long **B = new long long*[MAX];
for(int i = 0; i <= nV; i++)
B[i] = new long long[MAX];
for(int i = 1; i <= nV; i++)
B[i][i] = 0;
for(int i = 1; i <= nV - 1; i++)
B[i][i + 1] = A[i - 1] * A[i] * A[i + 1];
for(int l = 2; l <= nV - 1; l++)
for(int i = 1; i <= nV - l; i++)
{
int j = i + l;
B[i][j] = INF;
for(int k = i; k <= j - 1; k++)
{
long long q = B[i][k] + B[k + 1][j] + A[i - 1] * A[k] * A[j];
if(q < B[i][j]) B[i][j] = q;
}
}
return B[1][nV];
}