Cod sursa(job #1500016)

Utilizator Julian.FMI Caluian Iulian Julian. Data 11 octombrie 2015 14:04:45
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#define nmax 505
#define inf 9999999

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

struct element
{long x,y;};
element a[nmax];
element rez[nmax][nmax];
long sol[nmax][nmax];


int main()
{long n,x,y,i,minim,poz,k,j,nr;
    fin>>n;
    fin>>x;
    for(i=2;i<=n+1;i++)
        {fin>>y;
        a[i-1].x=x;
        a[i-1].y=y;
        x=y;
        }

for(i=1;i<=n;i++)
    {sol[i][i]=0;
    rez[i][i]=a[i];}

for(nr=2;nr<=n;nr++)
 for(i=1;i<=n-nr+1;i++)
  {j=i+nr-1;
    minim=inf;poz=0;
    for(k=i;k<j;k++)
        {
           long val=(rez[i][k].x * rez[i][k].y * rez[k+1][j].y);

            if(sol[i][k]+sol[k+1][j]+val<minim)
            {minim=sol[i][k]+sol[k+1][j]+val; poz=k;}
       }

    sol[i][j]=minim;
    rez[i][j].x=rez[i][poz].x;
    rez[i][j].y=rez[poz+1][j].y;

}

fout<<sol[1][n];

}