Cod sursa(job #977444)

Utilizator andrettiAndretti Naiden andretti Data 25 iulie 2013 21:06:10
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#include<algorithm>
#define maxn 505
#define inf 1LL<<60
using namespace std;

int n;
long long d[maxn],m[maxn][maxn];

void read()
{
    scanf("%d",&n);
    for(int i=1;i<=n+1;i++) scanf("%lld",&d[i]);
}

void det(int i,int j)
{
    long long minn=inf;
    for(int k=i;k<j;k++)
    {
        if(!m[i][k] && k!=i) det(i,k);
        if(!m[k+1][j] && k+1!=j) det(k+1,j);
        minn=min(minn,m[i][k]+m[k+1][j]+d[i]*d[k+1]*d[j+1]);
    }
    m[i][j]=minn;
}

void solve()
{
    int i,j,k;
    //for(i=1;i<n;i++) m[i][i+1]=d[i]*d[i+1]*d[i+2];
    det(1,n);
}

int main()
{
    freopen("podm.in","r",stdin);
    freopen("podm.out","w",stdout);

    read();
    solve();
    printf("%lld",m[1][n]);

    fclose(stdin);
    fclose(stdout);
    return 0;
}