Pagini recente » Clasament cluj | Cod sursa (job #616411) | Cod sursa (job #2610986) | oji__sim | Cod sursa (job #2750278)
#include <fstream>
#define NUM_MATRIXES 505
#define INF 9223372036854775807
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int n; // num of matrixes
int matrix[NUM_MATRIXES];
long long multiply[NUM_MATRIXES][NUM_MATRIXES];
void read()
{
fin >> n;
for (int i = 0; i <= n; ++ i)
fin >> matrix[i];
}
void print()
{
fout << n << endl;
for (int i = 1; i <= n; ++ i)
fout << i << ": " << matrix[i - 1]
<< ' ' << matrix[i] << endl;
}
long long num_of_operations(int i, int j)
{
if (multiply[i][j])
return multiply[i][j];
if (i == j)
return 0;
if (j == i + 1)
return matrix[i - 1] * matrix[i] * matrix[j];
long long min = INF;
for (int k = i; k < j; ++ k)
{
long long operations = 0;
multiply[i][k] = num_of_operations(i, k);
multiply[k + 1][j] = num_of_operations(k + 1, j);
operations = multiply[i][k] + multiply[k + 1][j]
+ 1LL * matrix[i - 1] * matrix[k] * matrix[j];
if (operations < min)
min = operations;
}
multiply[i][j] = min;
return min;
}
int main()
{
read();
fout << num_of_operations(1, n);
// print();
return 0;
}