Pagini recente » Atasamentele paginii Profil babypink05 | Cod sursa (job #1693695) | Rating Andrei Iulian (zarred7) | Cod sursa (job #866936) | Cod sursa (job #2014165)
#include <fstream>
#define VAL 505
#define INF 1000000000000000000
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int N, i, j, k;
int v[VAL], l;
long long dp[VAL][VAL], mn;
void Check1(int a, int b, int c, int d)
{
long long X=dp[c][d], Y, Z;
Y=1LL*v[a]*v[b]*v[c]+1LL*v[a]*v[c]*v[d];
Z=1LL*v[b]*v[c]*v[d]+1LL*v[a]*v[b]*v[c];
X+=min(Y, Z);
mn=min(mn, X);
}
void Check2(int a, int b, int c, int d)
{
long long X=dp[a][b], Y, Z;
Y=1LL*v[a]*v[b]*v[c]+1LL*v[a]*v[c]*v[d];
Z=1LL*v[b]*v[c]*v[d]+1LL*v[a]*v[b]*v[c];
X+=min(Y, Z);
mn=min(mn, X);
}
void Check3(int a, int b, int c, int d)
{
long long X=dp[a][b]+dp[c][d], Y, Z;
Y=1LL*v[a]*v[b]*v[c]+1LL*v[a]*v[c]*v[d];
Z=1LL*v[b]*v[c]*v[d]+1LL*v[a]*v[b]*v[c];
X+=min(Y, Z);
mn=min(mn, X);
}
int main()
{
fin >> N;
N++;
for (i=1; i<=N; i++)
fin >> v[i];
for (l=3; l<=N; l++)
{
for (i=1; i<=N-l+1; i++)
{
j=i+l-1;
mn=INF;
for (k=i+2; k<=j-3; k++)
Check3(i, k, k+1, j);
if (l==3)
mn=1LL*v[i]*v[i+1]*v[i+2];
if (l>=4)
{
mn=min(mn, 1LL*v[i]*v[i+1]*v[j]+dp[i+1][j]);
mn=min(mn, 1LL*v[i]*v[j-1]*v[j]+dp[i][j-1]);
}
if (l>=5)
{
Check1(i, i+1, i+2, j);
Check2(i, j-2, j-1, j);
}
dp[i][j]=mn;
}
}
fout << dp[1][N] << '\n';
fin.close();
fout.close();
return 0;
}