Cod sursa(job #2831643)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 11 ianuarie 2022 20:18:50
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

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

typedef long long i64;

i64 d[505],n;
i64 m[505][505];

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

    for (int l = 0; l < n; l++)
    {
        for (int i = 1; i <= n - l; i++)
        {
            if (l == 0)
                m[i][i] = 0;
            else if (l == 1)
                m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
            else
            {
                i64 minim = 1e18;
                for (int j = i; j < i + l; j++)
                {
                    i64 prod = m[i][j] + m[j + 1][i + l] + d[i - 1] * d[j] * d[i + l];
                    if (prod < minim)
                        minim = prod;
                }
                m[i][i + l] = minim;
            }
        }
    }
    out << m[1][n];
    return 0;
}

///la pentru fiecare i si l,caut minimul pentru a inmulti matricele i si i+l
///solutiile sunt diferite pentru toate j, i+l>j>i, descompunand produsul matriceal in inultirea dintre matricele i...j si j...i+l
///pentru i,j,l solutia este m[i][j] + m[j][i+l]