Cod sursa(job #1593603)

Utilizator SilviuIIon Silviu SilviuI Data 8 februarie 2016 18:51:40
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

typedef long long int ll;

int n;
int t[1<<9];
ll 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)+1LL*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("%d",&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]=1LL*t[i]*t[i+1]*t[i-1];

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

    return 0;
}