Pagini recente » Cod sursa (job #2126992) | Cod sursa (job #1225827) | Cod sursa (job #1139447) | Cod sursa (job #2247774) | Cod sursa (job #2910749)
// This program was written by Mircea Rebengiuc
// on 22.06.2022
// for problem podm
#include <stdio.h>
#include <ctype.h>
#define MAXN 500
#define UNDEFINED -1
#define ll long long
int lat[MAXN + 1];
ll dp[MAXN][MAXN];
void init_dp( int n ){
int i, j;
for( i = 0 ; i < n ; i++ )
for( j = 0 ; j < n ; j++ )
dp[i][j] = UNDEFINED;
for( i = 0 ; i < n ; i++ )
dp[i][i] = 0;
}
static inline ll min( ll a, ll b ){ return a < b ? a : b; }
ll getDP( int l, int r ){// big brain memoizare
int mij;
ll retval = 5e14;
if( dp[l][r] != UNDEFINED )
return dp[l][r];
for( mij = l ; mij < r ; mij++ )
retval = min( retval,
getDP( l, mij ) +
getDP( mij + 1, r ) +
((long long)lat[l]) * lat[mij + 1] * lat[r + 1]
);
return (dp[l][r] = retval);
}
FILE *fin, *fout;
int main(){
fin = fopen( "podm.in", "r" );
fout = fopen( "podm.out", "w" );
int n, i;
fscanf( fin, "%d", &n );
for( i = 0 ; i <= n ; i++ )
fscanf( fin, "%d", lat + i );
init_dp( n );
fprintf( fout, "%lld\n", getDP( 0, n - 1 ) );
fclose( fin );
fclose( fout );
return 0;
}