Cod sursa(job #1347711)

Utilizator PescaruVictorPescaru Victor PescaruVictor Data 19 februarie 2015 09:37:58
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>

using namespace std;

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

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

void citire ();
void pd ();
void rec (int a, int b);

int main()
{
    citire();
    pd();
    fout<<nrmin[1][n];
    //rec(1, n);
    return 0;
}

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

void pd ()
{
    int i, j, k, lg;
    for(i=1; i<n; ++i)
        nrmin[i][i+1]=d[i-1]*d[i]*d[i+1];

    for(lg=3; lg<=n; ++lg)
        for(i=1; i<=n-lg+1; ++i)
        {
            j=i+lg-1;
            nrmin[i][j]=nrmin[i+1][j]+d[i-1]*d[i]*d[j];
            nrmin[j][i]=i;
            for(k=i+1; k<j; ++k)
                if(nrmin[i][j] > nrmin[i][k]+nrmin[k+1][j]+d[i-1]*d[k]*d[j] )
                {
                    nrmin[i][j]=nrmin[i][k]+nrmin[k+1][j]+d[i-1]*d[k]*d[j];
                    nrmin[j][i]=k;
                }
        }
}

void rec (int a, int b)
{
    fout<<" ( ";
    if(a-b<=1)
        fout<< 'A'<<a<<", A"<<b<<" ) ";
    else
    {
        rec(a, nrmin[b][a]);
        rec(nrmin[b][a]+1, b);
    }
}