Cod sursa(job #819415)

Utilizator alexandratataruTataru Alexandra alexandratataru Data 18 noiembrie 2012 22:39:55
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#define infinit 100000000000000000

using namespace std;

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

long long int cmin[508][508],d[508];  
//cmin[i][j]=nr min de inmultiri elementare necesare pt a inmulti matricile de la a[i] la a[j] 
int n;

void pd();
int minim(int a,int b);

int main()
{
    int i;
    fin>>n;//citim numarul de matrici
    //citim dimensiunile matricelor
    for(i=0;i<=n;i++)
        fin>>d[i];

    pd();

    fout<<cmin[1][n];
	fout<<'\n';
	fout.close();
    return 0;
}

void pd()
{
    int i,i1,j,k;
    //initializare
    for(i=1;i<n;i++)
        cmin[i][i+1]=d[i-1]*d[i]*d[i+1];
    //incepem pd
    for(i1=1;i1<n;i1++)
        for(i=1;i<=n-i1;i++)
        {
            j=i1+i;
            //calculam cmin[i][j]
            cmin[i][j]=infinit;
            for(k=i;k<j;k++)
                cmin[i][j]=minim(cmin[i][j],cmin[i][k]+cmin[k+1][j]+d[i-1]*d[k]*d[j]);
        }
}

int minim(int a,int b)
{
    if(a<b)
        return a;
    else
        return b;
}