Pagini recente » Atasamentele paginii Clasament cartof123 | Cod sursa (job #1705938) | Statistici Diana Elena (DianaEllena) | Cod sursa (job #1705941) | Cod sursa (job #1180448)
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <limits>
using namespace std;
#define in "podm.in"
#define out "podm.out"
#define MAXN 501
int n, arr[MAXN], best[MAXN][MAXN];
int min(int a, int b)
{
return a < b ? a : b;
}
void read_input()
{
ifstream fin(in);
fin >> n;
n++;
for (int i = 0; i < n; ++i)
{
fin >> arr[i];
//cout << arr[i] << ' ';
}
//cout << '\n';
fin.close();
}
void print_debug()
{
cout << '\n';
for (int i = 1; i <= n; i++)
{
cout << '\n';
for (int j = 1; j <= n; j++)
{
cout << best[i][j] << ' ';
}
}
}
void print_solution()
{
ofstream fout(out);
fout << best[1][n-1];
fout.close();
}
int compute_val(int i, int k, int j)
{
return best[i][k] + best[k + 1][j] + (arr[i - 1] * arr[k] * arr[j]);
}
int compute_best(int i, int j)
{
int min = numeric_limits<int>::max();
int cval;
for (int k = i; k < j; ++k)
{
cval = compute_val(i, k, j);
if (cval < min)
{
min = cval;
}
}
return min;
}
void resolve()
{
for (int i = 1; i < (n - 1); ++i)
{
for (int j = 1; j < (n - i); ++j)
{
best[j][j + i] = compute_best(j, j + i);
}
}
}
int main()
{
read_input();
resolve();
//print_debug();
print_solution();
//char x;
//cin >> x;
return 0;
}