Cod sursa(job #1094433)

Utilizator Maxim97Maxim Andrei Maxim97 Data 29 ianuarie 2014 14:10:19
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#define D 505
#define inf 100000000000000000LL
using namespace std;

ifstream in("podm.in");
ofstream o("podm.out");

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

void cit()
{
    int i;
    in>>n;
    for(i=0;i<=n;i++)in>>d[i];
    in.close();
}

void pd()
{
    int i,j,k,x,minim,kmin;
    for(i=1;i<n;i++)    nrmin[i][i+1]=d[i-1]*d[i]*d[i+1];
    for(x=2;x<=n-1;x++)
    {
        for (i=1;i<=n-x+1;i++)
        {
            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]){
                    kmin=k;
                    minim=nrmin[i][k]+nrmin[k+1][j]+d[i-1]*d[k]*d[j];}
            }
            nrmin[i][j]=minim;
            nrmin[j][i]=kmin;
        }
    }
}

int main()
{
    cit();
    pd();
    o<<nrmin[1][n]<<'\n';
    o.close();
    return 0;
}