Cod sursa(job #1434990)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 11 mai 2015 20:10:23
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;

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

#define N 505
#define INF 9223372036854775807

long long d[N], a[N][N];
int n;

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

    for(int l = 2; l <= n; l++)
    {
        for(int i = 1; i <= n; i++)
        {
            int j = i + l - 1;
            if(j > n)
                continue;
            if(l == 2)
            {
                a[i][j] = d[i] * d[i + 1] * d[i + 2];
                continue;
            }

            if(l == 3)
            {
                a[i][j] = min(a[i][i + 1] + d[i] * d[i + 2] * d[j + 1], d[i] * d[i + 1] * d[j + 1] + a[i + 1][j]);
                continue;
            }

            a[i][j] = INF;
            a[i][j] = min(a[i][j - 1] + d[i] * d[j] * d[j + 1] ,a[i + 1][j] + d[i] * d[i + 1] * d[j + 1]);
            for(int k = i + 1; k <= j - 2; k++)
                a[i][j] = min(a[i][j], a[i][k] + a[k + 1][j] + d[i] * d[k + 1] * d[j + 1]);
        }
    }

    out << a[1][n] << '\n';
    return 0;
}