Cod sursa(job #2256829)

Utilizator baranceanuBaranceanu Vlad baranceanu Data 9 octombrie 2018 10:32:37
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#define NMAX 510

using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int n;
long long int d[NMAX];
long long int cmin[NMAX][NMAX];

void read();
void pd();
void print();

int main()
{
    read();
    pd();
    print();
    return 0;
}

void read(){
    int i;
    fin >> n;
    for(i = 0; i < n + 1; i++)
        fin >> d[i];
}

void pd(){
    int i, j, k, nr;
    long long int minim;
    //initializare pt 2 matrice
    for(i = 1; i < n; i++)
        cmin[i][i + 1] = d[i - 1]*d[i]*d[i + 1];
    for(nr = 3; nr <= n; nr++){
        //calculez costul pt toate secv de nr matrice
        for(i = 1; i <= n - nr + 1; i++){
            j = i + nr - 1;//limita
            minim = cmin[i + 1][j] + d[i - 1]*d[i]*d[j];
            for(k = i + 1; k < j; k++)
            if(minim > cmin[i][k] + cmin[k + 1][j] + d[i - 1]*d[k]*d[j]){
                minim = cmin[i][k] + cmin[k + 1][j] + d[i - 1]*d[k]*d[j];
            }
            cmin[i][j] = minim;
        }
    }
}

void print(){
    fout << cmin[1][n] << '\n';
}