Pagini recente » Cod sursa (job #703384) | Cod sursa (job #2076580) | Cod sursa (job #791373) | Cod sursa (job #283367) | Cod sursa (job #1264397)
#include <fstream>
#include <vector>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std ;
ifstream fin("podm.in") ;
ofstream fout("podm.out") ;
#define INF 100000000000000000LL
const int NMAX = 505 ;
long long D[NMAX], M[NMAX][NMAX] ;
int N ;
static inline int max(int a, int b) {return (a > b ? a : b) ; }
static inline int min(int a, int b) {return (a < b ? a : b) ; }
int main()
{
fin >> N ;
for(int i = 0 ; i <= N ; ++ i)
fin >> D[i] ;
for(int i = 1 ; i <= N ; ++ i)
M[i][i] = 0 ;
for(int i = 1 ; i < N ; ++ i)
M[i][i + 1] = D[i - 1] * D[i] * D[i + 1] ;
for(int t = 2 ; t < N ; ++ t)
for(int i = 1 ; i <= N - t ; ++ i)
{
int j = i + t ;
M[i][j] = INF ;
for(int k = i ; k < j ; ++ k)
{
M[i][j] = min(M[i][j], M[i][k] + M[k + 1][j] + D[i - 1] * D[k] * D[j]) ;
}
}
fout << M[1][N] << '\n';
fin.close() ;
fout.close() ;
return 0 ;
}