Cod sursa(job #1593639)

Utilizator SilviuIIon Silviu SilviuI Data 8 februarie 2016 19:26:31
Problema Parantezare optima de matrici Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

typedef long long int ll;

int n;
ll t[1<<9],dp[1<<9][1<<9];

/// dp[i][j] numarul minim de operatii necesare pentru a obtine [i,j]

ll memo(int x,int y)
{
    if (dp[x][y]!=1e18) return dp[x][y];

    for (int i=x;i<y;i++)
        dp[x][y]=min(dp[x][y],memo(x,i)+memo(i+1,y)+t[i]*t[x-1]*t[y]);

    return dp[x][y];
}

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

    scanf("%d",&n);

    for (int i=0;i<=n;i++) scanf("%lld",&t[i]);

    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
             dp[i][j]=1e18;

    for (int i=1;i<=n;i++) dp[i][i]=0;

    for (int i=1;i<n;i++) dp[i][i+1]=t[i]*t[i+1]*t[i-1];

    printf("%lld",memo(1,n));

    return 0;
}