Cod sursa(job #532692)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 12 februarie 2011 11:24:20
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <algorithm>

using namespace std;

long long n, d[505], m[10000][10000];

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

void minim(long long i,long long j)
{
    //long long x=m[i][i]+m[i+1][j]+d[i-1]*d[i]*d[j];
    long long x=9999999999;
    m[i][j]=x;
    m[j][i]=i;
    for (long long k=i; k<j; k++)
    {
        int y=m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j];
        if (x>y)
        {

            x=y;
             m[i][j]=x;
            m[j][i]=k;
        }
    }
}

void matrice()
{
    for (long long i=2; i<=n; i++)
    {
        for (long long k=1, j=i; j<=n; j++,k++)
            minim(k,j);
    }
}

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

int main()
{
    freopen ("podm.in","r",stdin);
    freopen ("podm.out","w",stdout);
    citire();
    matrice();
    //afisare(1,n);
    printf ("%lld\n",m[1][n]);
    return 0;
}