Cod sursa(job #1094449)

Utilizator Alexandra_MMihaila Alexandra Alexandra_M Data 29 ianuarie 2014 14:12:22
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#define nmax 504
#define inf 2000000000000000000000ll

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

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

void citire();
void pd();
void afisare();

int main()
{
    citire();
    pd();
    afisare();
    return 0;
}
void citire()
{
    int i;
    fin>>n;
    for (i=0; i<=n; i++)
         fin>>d[i];
}
void pd()
{
    long long i, x, j, minim, k, kmin;
    ///initializare
    ///doua matrice
    for (i=1; i<n; i++)
         nrmin[i][i+1]=d[i-1]*d[i]*d[i+1];
    ///calc pt x matrice x=3,...,n
    for (x=3; x<=n; x++)
        for (i=1; i<=n-x+1; i++)
            ///x matrice incepand de la poz i. Ai.....Ai+x-1
        {
            j=i+x-1;
            minim=inf;
            for (k=i; k<j; k++)
                if (minim>nrmin[i][k]+nrmin[k+1][j]+d[i-1]*d[k]*d[j])
                {
                    minim=nrmin[i][k]+nrmin[k+1][j]+d[i-1]*d[k]*d[j];
                    kmin=k;
                }
            nrmin[i][j]=minim;
            nrmin[j][i]=kmin;
        }
}
void afisare()
{
    fout<<nrmin[1][n];
}