Cod sursa(job #1790856)

Utilizator Horia14Horia Banciu Horia14 Data 28 octombrie 2016 19:51:08
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<cstdio>
#define NMAX 502
using namespace std;

long long unsigned M[NMAX][NMAX];
unsigned d[NMAX], n;

void Read()
{
    FILE *fin = fopen("podm.in","r");
    fscanf(fin,"%d",&n);
    for(unsigned i=0; i<n+1; i++)
        fscanf(fin,"%d",&d[i]);
    fclose(fin);
}

void Rezolvare()
{
    long long unsigned Infinit = 1000000000000000000, minim;
    unsigned nr, i, j, k;
    for(nr=2; nr<=n; nr++)
        for(i=1; i<=n-nr+1; i++)
        {
            j = i+nr-1;
            for(k=i, minim = Infinit; k<j; k++)
                if(minim > M[i][k] + M[k+1][j] + d[i-1]*d[k]*d[j])
                    minim = M[i][k] + M[k+1][j] + d[i-1]*d[k]*d[j];
            M[i][j] = minim;
        }
}

int main()
{
    Read();
    Rezolvare();
    FILE *fout = fopen("podm.out","w");
    fprintf(fout,"%llu\n",M[1][n]);
    fclose(fout);
    return 0;
}