Cod sursa(job #2256834)

Utilizator blajut.cristin12@gmail.comBlajut Cristin Marian [email protected] Data 9 octombrie 2018 10:40:17
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <bits/stdc++.h>
#define NMAX 510
using namespace std;
ifstream fin ("podm.in");
ofstream fout("podm.out");
int n,i;
long long int d[NMAX];
long long int cmin[NMAX][NMAX];
void citire()
{
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>d[i];
}
void pd()
{
    long long int nr,j,minim,k,i,kminim;
    for(i=1; i<n; i++)
        cmin[i][i+1]=d[i-1]*d[i]*d[i+1];
    for(nr=3; nr<=n; nr++) // calculez costul pentru toate secv de nr matrice
    {
        for(i=1; i<=n-nr+1; i++)
        {
            j=i+nr-1;
            minim=cmin[i+1][j]+d[i-1]*d[i]*d[j];
            kminim=i;
            for(k=i+1; k<j; k++)
            {
                if(minim>cmin[i][k]+cmin[k+1][j]+d[i-1]*d[k]*d[j])
                    minim=cmin[i][k]+cmin[k+1][j]+d[i-1]*d[k]*d[j];
                cmin[i][j]=minim;
                kminim=k;
                cmin[i][j]=minim;
                cmin[j][i]=kminim;
            }
        }
    }
}
void parantezare(int st,int dr)
{
    if(st==dr)
    {
        fout<<"A"<<st;
        return;
    }
    if(st==dr-1)
    {
        fout<<"A"<<st<<"x"<<"A"<<dr;
        return;
    }
    fout<<"(";
    parantezare(st,cmin[dr][st]);
    fout<<")x(";
    parantezare(cmin[dr][st]+1,dr);
    fout<<")";

}
void afisare()
{
    fout<<cmin[1][n]<<'\n';
    parantezare(1,n);
}

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