Cod sursa(job #1355812)

Utilizator Andrei_TirpescuAndrei Tirpescu Andrei_Tirpescu Data 22 februarie 2015 23:12:33
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define NMAX 502
#define INF 10000000000
using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

int n;
long long int d[NMAX];
long long int nrmin[NMAX][NMAX];

void init();
void pd();

int main(){

    init();
    pd();
    fout<<nrmin[1][n]<<'\n';

    return 0;
}

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

void pd(){
    int lg, i, j, k, minim, kmin;


    for(i = 1; i < n; ++i) nrmin[i][i+1] = d[i-1]*d[i]*d[i+1];

    for(lg = 3; lg <= n; ++lg){
        for(i = 1; i <= n-lg+1; ++i){
            j = i+lg-1;
            minim = INF;
            for(k = i; k < j; ++k){
                if(minim > nrmin[i][k] + nrmin[k+1][j] + d[i-1]*d[k]*d[j]){
                    minim = nrmin[i][k] + nrmin[k+1][j] + d[i-1]*d[k]*d[j];
                    kmin = k;
                }
            }
            nrmin[i][j] = minim;
            nrmin[j][i] = kmin;
        }
    }
}