Cod sursa(job #1264314)

Utilizator gerd13David Gergely gerd13 Data 15 noiembrie 2014 18:23:45
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#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 ;
}