Cod sursa(job #532677)

Utilizator Sm3USmeu Rares Sm3U Data 12 februarie 2011 11:22:07
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

long long n;
long long d[600];
long long m[600][600];


void citire()
{
    scanf("%lld",&n);
    for(long long i=0;i<=n;i++)
    {
        scanf("%lld",&d[i]);
    }
}

void recursiv(long long i, long long j)
{
    if(i==j)
    {
        printf("A%lld ",i);
        return;
    }
    printf("(");
    recursiv(i,m[j][i]);
    recursiv(m[j][i]+1,j);
    printf(")");
}


int main()
{
    freopen("podm.in","r",stdin);
    //freopen("podm.out","w",stout);
    citire();
    for(long long i=2;i<=n;i++)
    {
        for(long long j=i,k=1;j<=n;j++,k++)
        {
            long long x=1999999;
            long long X;
            for(long long I=k;I<j;I++)
            {
                long long y=m[k][I]+m[I+1][j]+d[k-1]*d[I]*d[j];
                if(x>y)
                {
                    x=y;
                    X=I;
                }
            }
            m[j][k]=X;
            m[k][j]=x;
        }
    }
    printf("%lld\n",m[1][n]);
   // recursiv(1,n);

    return 0;
}