Cod sursa(job #532719)

Utilizator Viva12Ferentz Sergiu Viva12 Data 12 februarie 2011 11:40:01
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>

using namespace std;

int d[510];
int n;
void citire()
{
    scanf("%d",&n);
        for(int i=0;i<n+1;i++)
             scanf("%d",&d[i]);

}
long long x[1000][1000];

void solve()
{
    int k;
    for(int nrp=1;nrp<n;nrp++)
    for (int i=1;i<=n-nrp;i++)
        {
        long long min=x[i][i]+x[i+1][i+nrp]+d[i-1]*d[i]*d[i+nrp];
        long long kk=0;
        for (int k=i;k<i+nrp;k++)
            {   long long z=0;

                z=x[i][k]+x[k+1][i+nrp]+d[i-1]*d[k]*d[i+nrp];
                if(min>z)
                    {min=z;
                    kk=k;
                    }
            }
            x[i][i+nrp]=min;
            x[i+nrp][i]=kk;
        }
}

/*void recursiv(int i, int j)
{
    if(i==j)
        {
        printf("A%d",i);
        return;
        }
    printf("(");
    recursiv(i,x[j][i]);
    printf(" ");
    recursiv(x[j][i]+1,j);
    printf(")");

}
*/
int main()
{
    freopen("podm.in","r",stdin);
    freopen("podm.out","w",stdout);
    citire();
    solve();
    //recursiv(1,4);
    printf("%lld",x[1][n]);
    return 0;
}