Cod sursa(job #813260)

Utilizator manuelahordunaHorduna Manuela manuelahorduna Data 15 noiembrie 2012 08:23:33
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
#define lgmax 10001
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");

void citire();
void pd();
void afisare(int x, int y);

long long int m[lgmax][lgmax];
long long int d[lgmax];
int n;
long long int  inf=1000000000;

int main()
{
    citire();
    pd();

    fout<<m[1][n]<<'\n';
    //afisare(1,n);

    fout.close();
    return 0;
}

void citire()
{
    int i;
    fin>>n;
    for(i=0;i<n+1;i++)
        fin>>d[i];
}

void pd()
{
    int lg, i,j,k,pozmin;
    int min;
    for(lg=2;lg<=n;lg++)
        for(i=1;i<=n-lg+1;i++)
        {
            j=i+lg-1;//sf secventei
            //se inmultesc nr matrice de la Ai laAj
            for(k=i,min=inf;k<j;k++)
            {
                //det min si poz sau
                if(min>m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j])
                {
                    min=m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j];
                    pozmin=k;
                }
            }
            m[i][j]=min;
            m[j][i]=pozmin;
        }
}
/*
void afisare(int i,int j)
{
    if(i==m[j][i]) fout<<"A"<<i;
        else
        {
            fout<<"(";
            afisare(i, m[j][i]);
            fout<<")";
        }
    fout<<"x";
    if(j==m[j][i]+1) fout<<"A"<<j;
        else
        {

            fout<<"(";
            afisare(m[j][i]+1,j);
            fout<<")";
        }
}
*/