Cod sursa(job #914223)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 13 martie 2013 22:55:44
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <algorithm>

#define NMAX 502
#define INF 0x03f3f3f3f3f3f

using namespace std;

int n;
long long d[NMAX];
long long s[NMAX][NMAX];

void read()
{
    freopen("podm.in", "r", stdin);

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

long long solve()
{
    for(int i = 1; i < n; ++ i)
        s[i][i + 1] = d[i - 1] * d[i] * d[i + 1];

    for(int l = 2; l < n; ++ l)
        for(int i = 1; i <= n - l; ++ i)
        {
            int j = l + i;
            s[i][j] = INF;

            for(int k = i; k <= j - 1; ++ k)
                s[i][j] = min(s[i][j], s[i][k] + s[k + 1][j] + d[i - 1] * d[k] * d[j]);
        }

    return s[1][n];
}

int main()
{
    read();

    freopen("podm.out", "w", stdout);
    printf("%lld\n", solve());

    return 0;
}