Cod sursa(job #823895)

Utilizator ericptsStavarache Petru Eric ericpts Data 25 noiembrie 2012 18:21:09
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>

using namespace std;

int inm[501][501];
short int d[501];

inline int _min(int a,int b)
{
    if(a<b)
        return a;
    return b;
}

int best(int a,int b)
{
    if(inm[a][b] || a== b)
        return inm[a][b];
    int minsofar = 1 << 30;
    int k;
    for(k=a;k<b;++k)
        minsofar = _min(minsofar,best(a,k) + best(k+1,b) + d[a-1] * d[k] * d[b]);
    return (inm[a][b] = minsofar);
}

int main()
{
    int i,n;
    freopen("podm.in","r",stdin);
    freopen("podm.out","w",stdout);
    scanf("%d",&n);
    for(i=0;i<=n;++i)
    {
        scanf("%d",&d[i]);
        inm[i][i] = 0;
    }
    inm[i][i] = 0;
    printf("%d\n",best(1,n));
    return 0;
}