Cod sursa(job #813172)

Utilizator cristian.ion94Ion Cristian cristian.ion94 Data 14 noiembrie 2012 23:22:24
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

const int DMAX = 501;

int n;
long long int d[DMAX];
long long int CMin[DMAX][DMAX];

void Citire();
void pd();
void afisare();

int main()
{
    Citire();
    pd();
    afisare();
    return 0;
}

void Citire()
{
    ifstream fin("podm.in");

    fin >> n;

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

    fin.close();
}

void pd()
{
    int i, j, k;

    for(i = 1; i <= n; i++)
        CMin[i][i] = 0;
    for(i = 1; i <= n-1; i++)
        CMin[i][i+1] = d[i-1] * d[i] * d[i+1];

    for(i = n-2; i >= 1; i--)
    {
        for(j = i+1; j <= n; j++)
        {
            k = i;
            CMin[i][j] = CMin[i][k] + CMin[k+1][j] + d[i-1] * d[k] * d[j];
            for(k = i+1; k <= j-1; k++)
            {
                if(CMin[i][k] + CMin[k+1][j] + d[i-1] * d[k] * d[j] < CMin[i][j])
                {
                    CMin[i][j] = CMin[i][k] + CMin[k+1][j] + d[i-1] * d[k] * d[j];
                }
            }
        }
    }
}

void afisare()
{
    ofstream fout("podm.out");

    fout << CMin[1][n] << '\n';

    fout.close();
}