Cod sursa(job #2575461)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 6 martie 2020 13:39:41
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define FILE_NAME "podm"
#define fast ios_base :: sync_with_stdio(0); cin.tie(0);
#pragma GCC optimize("O3")
#define NMAX 500 + 50
using namespace std;

ifstream f(FILE_NAME ".in");
ofstream g(FILE_NAME ".out");

typedef long long ll;
typedef long double ld;
typedef pair<int,int> pi;
typedef pair<ll,ll> llp;
typedef pair<ld,ld> pct;

const ll inf = 1LL << 60;
const ll mod = 1e9 + 7;
const ld eps = 1e-9;


void add(ll &a , ll b)
{
    a += b;
    a %= mod;
}

void sub(ll &a, ll b)
{
    a = (a - b + mod) % mod;
}

ll d[NMAX], n, pd[NMAX][NMAX];

int main()
{
    f >> n;
    for(int i = 0; i <= n; ++i)
        f >> d[i];

    for(int i = 1; i < n; ++i)
        pd[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
    for(int len = 2; len < n; ++len)
        for(int i = 1; i <= n - len; ++i)
        {
            pd[i][i + len] = inf;
            for(int j = i; j < i + len; ++j)
                pd[i][i + len] = min(pd[i][i + len], pd[i][j] + pd[j + 1][i + len] + d[i - 1] * d[j] * d[i + len] );
        }
    g << pd[1][n];
    f.close();
    g.close();
    return 0;
}