Cod sursa(job #2578772)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 11 martie 2020 16:05:50
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

const int NMAX = 500;
const long long INF = 1e16;

int N;
pair <int, int> v[NMAX + 5];

long long dp[NMAX + 5][NMAX + 5];

int main()
{
    fin >> N;

    fin >> v[1].first;

    for(int i = 1; i <= N; i++)
    {
        int x;
        fin >> x;

        v[i].second = x;
        v[i + 1].first = x;
    }

    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= N; j++)
        {
            dp[i][j] = INF;

            if(i == j)
                dp[i][j] = 0;
        }

    for(int l = 2; l <= N; l++)
        for(int s = 1; s <= N - l + 1; s++)
            for(int p = s; p <= s + l - 2; p++)
                dp[s][s + l - 1] = min(dp[s][s + l - 1],
                                       dp[s][p] + dp[p + 1][s + l - 1] +
                                       1LL * v[s].first * v[p].second * v[s + l - 1].second);

    fout << dp[1][N] << '\n';

    return 0;
}