Cod sursa(job #1000228)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 22 septembrie 2013 14:31:14
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <climits>

long long paran(long long *A, int nV);

int main()
{
    std::ifstream in("podm.in");
    std::ofstream out("podm.out");

    int nV;
    in >> nV;

    long long *nA = new long long[nV + 2];

    for(int i = 0; i <= nV; i++)
        in >> nA[i];

    out << paran(nA, nV);

    return 0;
}

long long paran(long long *A, int nV)
{
    long long **B = new long long*[nV + 1];

    for(int i = 0; i <= nV; i++)
        B[i] = new long long[nV + 1];

    for(int i = 1; i <= nV; i++)
        B[i][i] = 0;

    for(int l = 2; l <= nV; l++)
    {
        for(int i = 1; i <= nV - l + 1; i++)
        {
            int j = i + l - 1;
            B[i][j] = INT_MAX;
            for(int k = i; k < j; k++)
            {
                long long q = B[i][k] + B[k + 1][j] + A[i - 1] * A[k] * A[j];
                if(q < B[i][j]) B[i][j] = q;
            }
        }
    }
    return B[1][nV];
}