Cod sursa(job #1000236)

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

int paran(int *A, int nV);

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

    int nV;
    in >> nV;

    int *nA = new int[nV + 1];

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

    out << paran(nA, nV);

    return 0;
}

int paran(int *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 i = 1; i <= nV - 1; i++)
        B[i][i + 1] = A[i - 1] * A[i] * A[i + 1];

    for(int l = 2; l <= nV - 1; l++)
        for(int i = 1; i <= nV - l; i++)
        {
            int j = i + l;
            B[i][j] = INT_MAX;
            for(int k = i; k <= j - 1; 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];
}