Cod sursa(job #1941969)

Utilizator jason2013Andronache Riccardo jason2013 Data 27 martie 2017 18:36:39
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<bits/stdc++.h>
#define ll long long

using namespace std;

//variables

const long long inf = 10e18;
const long long maxN = 505;

long long n;
long long mat[maxN][maxN];
long long arr[maxN];

//--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, "%lld", &n);
    for(int i = 0; i <= n; i ++)
        fscanf(in, "%lld", &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 = inf;
            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, "%lld", mat[1][n]);
}