Cod sursa(job #823948)

Utilizator ericptsStavarache Petru Eric ericpts Data 25 noiembrie 2012 19:10:32
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>

using namespace std;

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

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

long long unsigned int best(int a,int b)
{
    if(inm[a][b] || a== b)
        return inm[a][b];
    long long unsigned int minsofar = 1LL <<63;
    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("%lld\n",best(1,n));
    return 0;
}