Cod sursa(job #1941960)

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

using namespace std;

//variables

const int N_MAX = 502;
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()
{
    ifstream f("podm.in");
    f >> n;
    for(int i = 0; i <= n; i ++)
        f >> 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 && a < 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()
{
    ofstream g("podm.out");
    g << mat[1][n];
    g.close();
}