Pagini recente » Cod sursa (job #1133990) | Cod sursa (job #2561418) | Cod sursa (job #1170945) | Cod sursa (job #403927) | Cod sursa (job #2279731)
#include <stdio.h>
#define MAXN 500
int D[MAXN+1];
long long c[MAXN][MAXN];
int N;
void minpar(){
// initializarea costului cu 0 (multiplicari)
long long temp;
for (int i = 0 ; i < N; i++)
c[i][i] = 0;
for (int i = 0 ; i < (N-1); i++)
c[i][i+1] = (long long)D[i]*(long long)D[i+1]*(long long)D[i+2];
int j;
for (int d = 2 ; d <= (N-1); d++){
for (int i = 0 ; i <= (N-1-d); i++){
j=i+d;
c[i][j] = c[i][i] + c[i+1][j] + (long long)D[i] * (long long)D[i+1] * (long long)D[j+1];;
for (int h = (i+1) ; h < (i+d); h++){
temp = c[i][h] + c[h+1][j] + (long long)D[i] * (long long)D[h+1] * (long long)D[j+1];
if ( temp < c[i][j] )
c[i][j] = temp; // se salveaza costul
}
}
}
}
int main () {
freopen("podm.in", "r", stdin);
freopen("podm.out", "w", stdout);
scanf("%d", &N);
for (int i = 0; i <= N; ++ i)
scanf("%d", &D[i]);
minpar();
printf("%lld\n",c[0][N-1]);
return 0;
}