Pagini recente » Cod sursa (job #2853904) | Cod sursa (job #2659439) | Cod sursa (job #239509) | Cod sursa (job #2381461) | Cod sursa (job #2626778)
#include <stdio.h>
#define LIM 500000000000000LL
long long dp[501][501];
int m[501];
int main() {
FILE *fin = fopen( "podm.in", "r" );
FILE *fout = fopen( "podm.out", "w" );
int n, i, j, k, d;
long long min;
fscanf( fin, "%d", &n );
for ( i = 0; i <= n; ++i ) {
fscanf( fin, "%d", &m[i] );
}
for ( i = 1; i < n; ++i ) {
dp[i][i + 1] = ((long long)m[i - 1]) * m[i] * m[i + 1];
}
for ( d = 1; d < n; ++d ) {
for ( i = 1; i <= n - d; ++i ) {
min = LIM;
for ( k = i; k < i + d; ++k ) {
if ( min > dp[i][k] + dp[k + 1][i + d] + ((long long)m[i - 1]) * m[k] * m[i + d] ) {
min = dp[i][k] + dp[k + 1][i + d] + ((long long)m[i - 1]) * m[k] * m[i + d];
}
}
dp[i][i + d] = min;
}
}
fprintf( fout, "%lld", dp[1][n] );
fclose( fin );
fclose( fout );
return 0;
}