Cod sursa(job #906947)

Utilizator darrenRares Buhai darren Data 7 martie 2013 14:32:39
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <algorithm>

using namespace std;

const long long INF = (1LL << 60);

int N;
int D[502];
long long minD[502][502];

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

    fin >> N;
    for (int i = 0; i <= N; ++i)
        fin >> D[i];

    for (int i = 2; i <= N; ++i)
        for (int j = 1; j <= N - i + 1; ++j)
        {
            if (i == 2)
            {
                minD[j][j + i - 1] = 1LL * D[j - 1] * D[j] * D[j + i - 1];
                continue;
            }

            minD[j][j + i - 1] = INF;
            for (int k = j; k < j + i - 1; ++k)
                minD[j][j + i - 1] = min(minD[j][j + i - 1], minD[j][k] + minD[k + 1][j + i - 1] + 1LL * D[j - 1] * D[k] * D[i + j - 1]);
        }

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

    fin.close();
    fout.close();
}