Cod sursa(job #1002730)

Utilizator R4DIC4LTeodorescu Oana Maria R4DIC4L Data 28 septembrie 2013 17:10:33
Problema Parantezare optima de matrici Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define NMAX 502
#define INFTY 500000000000000ll
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
void matrix_chain_order(void);
void read_sizes(void);
long long p[NMAX];
double m[NMAX][NMAX];
long long s[NMAX][NMAX];
int n;
int main()
{
    read_sizes();
    matrix_chain_order();
    g << m[1][n];
    f.close();
    g.close();
    return 0;
}

void read_sizes()
{
    int i;
    f >> n;
    if (n > 0)
    {
        for (i = 0; i <= n; i++)
            f >> p[i];
    }
}
void matrix_chain_order()
{
    int i, j, k, l;
    for (i = 1;i <= n; i++)
        m[i][i] = 0;
    for (l = 1; l < n; l++)
    {
        for (i = 1; i <= n-l; i++)
        {
            j = i + l;
            m[i][j] = INFTY;
            for (k = i; k <= j-1; k++)
            {
                double q = m[i][k] + m[k+1][j] + p[i-1] * p[k] * p[j];
                if (q < m[i][j])
                {
                    m[i][j] = q;
                    s[i][j] = k;
                }
            }
        }
    }
}