Pagini recente » Cod sursa (job #1348268) | Istoria paginii runda/oji_2004_10 | Istoria paginii runda/barosaneala420 | Istoria paginii runda/100112 | Cod sursa (job #1219278)
#include <cstdio>
#include <algorithm>
#define INF 1LL*9000000000000000
using namespace std;
int N;
long long DP[505][505];
long long v[505];
void read( void )
{
scanf("%d",&N);
for(int i = 1; i <= N + 1; ++i)
scanf("%lld", &v[i]);
for(int i = 0; i <= N + 1; ++i)
for(int j = 0; j <= N + 1; ++j)
if(i != j)
DP[i][j] = INF;
}
long long minim(long long a,long long b)
{
if(a < b)
return a;
return b;
}
void solve()
{
int i,j,k;
for(int d = 2; d <= N; ++d)
{
i = 1;
for(j = d; j <= N; ++j,++i)
for(k = i ; k < j; ++k)
if(DP[i][j] > DP[i][k] + DP[k+1][j] + v[i]*v[k+1]*v[j+1] )
{
DP[i][j] = DP[i][k] + DP[k+1][j] + v[i]*v[k+1]*v[j+1];
DP[j][i] = k;
}
}
printf("%lld\n",DP[1][N]);
}
int nr;
void print(int li,int lf)
{
if(li == lf)
{
printf("A%d",++nr);
return;
}
if(li != DP[lf][li])
{
printf("(");
print(li,DP[lf][li]);
printf(")");
}
else
print(li,DP[lf][li]);
printf(" x ");
if(lf != DP[lf][li] + 1)
{
printf("(");
print(DP[lf][li]+1,lf);
printf(")");
}
else
print(DP[lf][li]+1,lf);
}
int main()
{
freopen("podm.in","r",stdin);
freopen("podm.out","w",stdout);
read();
solve();
///print(1,N);
return 0;
}