Cod sursa(job #1094429)

Utilizator pintilie.andreiPintilie pintilie.andrei Data 29 ianuarie 2014 14:09:55
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#define NMAX 504
#define INF 10000000000

using namespace std;

FILE *fin,*fout;

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

void citire();
void pd();
void afisare();

int main()
{
    citire();
    pd();
    afisare();
    return 0;
}

void citire()
{
    int i;
    fin=fopen("podm.in","r");
    fscanf(fin,"%d",&n);
    for(i=0;i<=n;i++)   fscanf(fin,"%d",&d[i]);
}

void pd()
{
    int i,x,j,minim,kmin,k;
    //initializari
    //doua matrici
    for(i=1;i<n;i++)
        nrmin[i][i+1]=d[i-1]*d[i]*d[i+1];
    for(x=2;x<n;x++)
        for(i=1;i<=n-x;i++)//pt a avea ultima matrice de dim x
        {
            j=i+x;
            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;
        }
}

void afisare()
{
    fout=fopen("podm.out","w");
    fprintf(fout,"%d\n",nrmin[1][n]);
}