Cod sursa(job #370310)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 30 noiembrie 2009 19:38:07
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
# include <cstdio>

using namespace std;

# define FIN "podm.in"
# define FOUT "podm.out"
# define min(a, b) ((a) < (b) ? (a) : (b))
# define MAX_N 500
# define INF 100000000000000000LL

int N, i, j, k;
long long D[MAX_N];
long long Op[MAX_N][MAX_N];

    int main()
    {
        freopen(FIN, "r", stdin);
        freopen(FOUT, "w", stdout);
        
        scanf("%d", &N);
        for (i = 1; i <= N + 1; ++i) scanf("%d", &D[i]);
        
        for (j = 1; j < N; ++j)
           for (i = 1; i + j <= N; ++i)
           {
               Op[i][i + j] = INF;
               for (k = i; k < i + j; ++k)
                  Op[i][i + j] = min(Op[i][i + j], Op[i][k] + Op[k + 1][i + j] + D[i] * D[k + 1] * D[i + j + 1]);
           }
        
        printf("%lld", Op[1][N]);  
        
        return 0;
    }