Cod sursa(job #1211283)

Utilizator vladmatei.nfoVlad Matei vladmatei.nfo Data 22 iulie 2014 12:09:34
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("podm.in");
ofstream out("podm.out");

long long m[510][510];
long long d[510],n;

void init()
{
    for(int i = 1; i < n; i++)
    {
        m[i][i + 1] = d[i-1] * d[i] * d[i + 1];
    }
}

long long getMin(int x,int y)
{
    long long min = 9999999;
    long long pRez;
    for(int i = x; i < y; i++)
    {
        pRez = m[x][i] + m[i + 1][y] + d[x-1] * d[i] * d[y];
        if(min > pRez)
        {
            min = pRez;
        }
    }
    return min;
}

void solve()
{
    int k;
    for(int i = 3; i <= n; i++)
    {
        k = 0;
        for(int j = 1; j <= n - i + 1; j++)
        {
            m[j][i + k] = getMin(j, i + k);
            k++;
        }
    }
}

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

void write()
{
    out<<m[1][n];
}

int main()
{
    read();
    init();
    solve();
    write();
}