Cod sursa(job #1075512)

Utilizator IeewIordache Bogdan Ieew Data 9 ianuarie 2014 04:43:16
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <fstream>

using namespace std;

#define DEBUG false
#define MAXN 512

#if DEBUG
#include <iostream>
#define INFILE "/Users/biordach/Documents/Xcode Projects/training/training/podm.in"
#define __OUT cout
#else
#define INFILE "podm.in"
#define OUTFILE "podm.out"
ofstream __OUT(OUTFILE);
#endif

#define INF 1999999999

void readInput();
void solve();
void printOutput();

int n;
int v[MAXN], a[MAXN][MAXN];

int main(int argc, const char * argv[])
{
    readInput();
    solve();
    printOutput();

#if DEBUG == false
    __OUT.close();
#endif
    
    return 0;
}

void readInput(){
    ifstream in(INFILE);
    in>>n;
    for(int i =0 ; i<=n; i++)
        in>>v[i];
    in.close();
}

void solve(){
    for(int i=1;i<n;i++){
        a[1][i] = v[i-1] * v[i] * v[i+1];
    }
    
    
    for(int l = 2; l<=n; l++){
        for(int i=1; i + l <= n; i++){
            int min = INF;
            for(int length1 = 0; length1 < l; length1++) {
                int j = i + length1 + 1;
                int length2 = l - length1 -1;
#if DEBUG
                __OUT<<"a[length1][i]: "<<a[length1][i]<<'\n';
                __OUT<<"a[length2][j]: "<<a[length2][j]<<'\n';
                __OUT<< v[i-1] << ' '<< v[j-1] <<' '<< v[i+l]<<'\n';
                __OUT<<'\n';
#endif
                int op = a[length1][i] + a[length2][j] + v[i-1] * v[j-1] * v[i+l];
                if(op < min){
                    min = op;
                }
            }
            a[l][i] = min;
        }
    }
#if DEBUG
    for(int i=0; i<n; i++){
        for(int j=0;j<n; j++)
            __OUT<<a[i][j]<<' ';
        __OUT<<'\n';
    }
#endif
}

void printOutput(){
    __OUT<<a[n-1][1]<<'\n';
}