Pagini recente » Istoria paginii runda/probleme_de_geometrie | Monitorul de evaluare | Cod sursa (job #2661356) | Cod sursa (job #989983) | Cod sursa (job #1211287)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
ifstream in("podm.in");
ofstream out("podm.out");
long long m[510][510];
long long d[510],n;
void init()
{
for(int i = 1; i < n; i++)
{
m[i][i + 1] = d[i-1] * d[i] * d[i + 1];
}
}
long long getMin(int x,int y)
{
long long min = LLONG_MAX;
long long pRez;
for(int i = x; i < y; i++)
{
pRez = m[x][i] + m[i + 1][y] + d[x-1] * d[i] * d[y];
if(min > pRez)
{
min = pRez;
}
}
return min;
}
void solve()
{
int k;
for(int i = 3; i <= n; i++)
{
k = 0;
for(int j = 1; j <= n - i + 1; j++)
{
m[j][i + k] = getMin(j, i + k);
k++;
}
}
}
void read()
{
in>>n;
for(int i = 0; i <= n; i++)
{
in>>d[i];
}
}
void write()
{
out<<m[1][n];
}
int main()
{
read();
init();
solve();
write();
}