Cod sursa(job #1093767)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 28 ianuarie 2014 16:18:20
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
using namespace std;

#define Nmax 505

int n;
long long int mat_dim[Nmax];
long long int mat_cost[Nmax][Nmax];
const long long int inf = 500000000000000;

void read()
{
    freopen("podm.in", "r", stdin);
    scanf("%d", &n);
    for (int i = 1; i <= n + 1; ++i)
        scanf("%lld", &mat_dim[i]);
    fclose(stdin);
}

long long int get_cost(int i, int j)
{
    long long int cost;

    if (mat_cost[i][j] < inf)
        return mat_cost[i][j];
    else {
        for (int k = i; k < j; ++k){
            cost = get_cost(i, k) + get_cost(k+1, j) + mat_dim[i] * mat_dim[k+1] * mat_dim[j+1];
            if (mat_cost[i][j] > cost)
                mat_cost[i][j] = cost;
        }
        return mat_cost[i][j];
    }
}

int main()
{
    read();
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            mat_cost[i][j] = inf;
    for (int i = 1; i <= n; ++i)
        mat_cost[i][i] = 0;

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

    return 0;
}