Cod sursa(job #2574681)

Utilizator georgecristian2002Raducanu George-Cristian georgecristian2002 Data 6 martie 2020 08:41:19
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include<fstream>
using namespace std;

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

const long long INF=1e18;
const long long N=10059;
long long d[N],c[N][N],n;

void citire()
{
    fin>>n;
    for(int i=0; i<=n; i++)
        fin>>d[i];
}
void matrice()
{
    long long i,p,aux,k,j,t,t1,len,k1;
    for(i=1; i<=n; i++)
        c[i][i]=0;
    for(i=1; i<=n-1; i++)
        c[i][i+1]=d[i-1]*d[i]*d[i+1];
    for(len=2; len<=n; len++)
    {
        i=1;
        for(j=len; j<=n; j++)
        {
            c[i][j]=INF;
            for(k=i; k<j; k++)
            {
                if(c[i][k]+c[k+1][j]+d[i-1]*d[k]*d[j]<c[i][j])
                {
                    c[i][j]=c[i][k]+c[k+1][j]+d[i-1]*d[k]*d[j];
                    k1=k;
                }
            }
            c[j][i]=k1;
            i++;
        }
    }
    /*for(t=1;t<=n;t++)
    {
        for(t1=1;t1<=n;t1++)
            fout<<c[t][t1]<<" ";
        fout<<'\n';
    }*/
    fout<<c[1][n]<<'\n';
}
void print(int i, int j)
{
    if(i==j)
    {
        fout<<i;
        return;
    }
    else{int k=c[j][i];
    if(k-i>0) fout<<"(";
    print(i,k);
    if(k-i>0) fout<<")";
    fout<<"*";
    if(j-k>1) fout<<"(";
    print(k+1,j);
    if(j-k>1) fout<<")";
    }
}
int main()
{
    citire();
    matrice();
    // fout<<"(";
    // print(1,n);
    //
    fout<<")";
    return 0;
}