Cod sursa(job #1022537)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 5 noiembrie 2013 17:44:36
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <memory.h>

#define Nmax 505
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
LL s[Nmax],DP[Nmax][Nmax];
int N;

LL mini (LL a ,LL b)
{
    if(a<b)return a;
    return b;
}

void read()
{

    scanf("%d",&N);
    for(int i = 0; i <= N; ++i)
        scanf("%lld",&s[i]);

}

void solve()
{
    for(int i = 1; i <= N ; ++i)
            DP[i][i] = 0;
    int i ,j , di, k;
    for(di = 2; di <= N; ++di)
        for(i = 1 , j = di ; j <= N ; ++j,++i)
        {
            DP[i][j] = ((long long)1<<62);
            for( k = i ; k <= j; ++k)
                DP[i][j] = mini( DP[i][j] ,s[i-1]*s[k]*s[j] + DP[i][k] + DP[k+1][j] );
        }
    printf("%lld",DP[1][N]);
}

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

    read();
    solve();

    return 0;
}