Cod sursa(job #2058775)

Utilizator StefanTifreaStefan Tifrea StefanTifrea Data 6 noiembrie 2017 09:49:35
Problema Parantezare optima de matrici Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int c[100][100],n,i,j,k,l,d[100],mmin,val,s[100][100],kmin;
void optim()
{
    int cost;
    for(i=1;i<=n;i++)
        c[i][i]=0;
    for(l=2;l<=n;l++)
        for(i=1;i<=n-l+1;i++)
        {
            j=i+l-1;
            mmin=1000000000;
            kmin=-1;
            for(k=i;k<=j-1;k++)
            {
                cost=c[i][k]+c[k+1][j]+d[i-1]*d[k]*d[j];
                if(cost<mmin)
                {
                    mmin=cost;
                    kmin=k;
                }
            }
            c[i][j]=mmin;
            c[j][i]=kmin;

        }
        /*for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
                fout<<c[i][j]<<" ";
            fout<<endl;
        }*/
        fout<<c[1][n]<<endl;

}
void afis(int i,int j)
{

    if(i==c[j][i])
        fout<<"A"<<i;
    else
    {
        fout<<"(";
        afis(i,c[j][i]);
        fout<<")";
    }
    fout<<"*";
    if(j==c[j][i]+1)
        fout<<"A"<<j;
    else
    {
        fout<<"(";
        afis(c[j][i]+1,j);
        fout<<")";
    }
}
int main()
{
    fin>>n;
    for(i=0;i<=n;i++)
        fin>>d[i];
    optim();
    //afis(1,n);
    return 0;
}