Cod sursa(job #1941962)

Utilizator jason2013Andronache Riccardo jason2013 Data 27 martie 2017 18:32:20
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<bits/stdc++.h>
#define oo 0x3f3f3f3f
#define ll long long

using namespace std;

//variables

const int N_MAX = 510;
long long arr[N_MAX], n, mat[N_MAX][N_MAX];

//--end variables

void read();
void solve();
void print();

int main()
{
    read(); solve(); print();
    return 0;
}

void read()
{
    FILE *in = fopen("podm.in", "r");
    fscanf(in, "%d", &n);
    for(int i = 0; i <= n; i ++)
        fscanf(in, "%d", &arr[i]);
}

void solve()
{
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            {
                if( i > j ) mat[i][j] = -1;
                mat[i][i] = 0;
            }
    ll a, b;
    for(int step = 1; step < n; step ++)
    {
        a = 1;
        b = step + 1;
        while( b <= n )
        {
            ll minim = oo;
            for(int k = a; k < b; k ++)
                minim = min( minim, mat[a][k] + mat[k+1][b] + arr[a-1] * arr[k] * arr[b] );
            mat[a][b] = minim;
            a ++; b ++;
        }
    }

}

void print()
{
    FILE *out = fopen("podm.out", "w");
    fprintf(out, "%d", mat[1][n]);
}