Cod sursa(job #1127312)

Utilizator lucianRRuscanu Lucian lucianR Data 27 februarie 2014 11:58:34
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#define N_MAX 510
#define INF 95998498

using namespace std;
ifstream in("podm.in");
ofstream out("podm.out");

int n, d[N_MAX], m[N_MAX][N_MAX];

void read()
{
    in >> n;
    for(int i = 1; i <= n + 1; i++)
        in >> d[i];
}

int solve()
{
    for(int i = 1; i <= n; i++)
    {
        m[i][i] = 0;
        m[i][i + 1] = d[i] * d[i + 1] * d[i + 2];
        for(int j = i + 2; j <= n; j++)
            m[i][j] = INF;
    }
    for(int s = 2; s <= n - 1; s++)
    {
        for(int i = 1; i <= n - s; i++)
        {
            for(int k = i; k < i + s; k++)
            {
                m[i][i + s] = min(m[i][i + s], m[i][k] + m[k + 1][i + s] + d[i] * d[k + 1] * d[i + s + 1]);
            }
        }
    }
    /*for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
            cout << m[i][j] << "      ";
        cout << endl;
    }*/
    return m[1][n];
}

int main()
{
    read();
    out << solve();
    return 0;
}