Cod sursa(job #2662691)

Utilizator CalinusCalin Navadaru Calinus Data 24 octombrie 2020 12:44:54
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>



using namespace std;



ifstream fin("podm.in");

ofstream fout("podm.out");



int n;

unsigned int d[505];

unsigned long long int dp[1000][1000];



void citire()

{

    fin >> n;

    for(int i = 0; i < n + 1; i++)

        fin >> d[i];



}



void initializare_dp()

{

    for(int i = 0; i < n; i++)

        dp[i][i+1] = d[i] * d[i+1] * d[i+2];



}



void solve()

{

    for(int c = 2; c <= (2*n - 1)/2; c++)

    {

        for(int i = 0; i < n; i++)

        {
            int j = i + c;
            dp[i][i + c] = dp[i][i] + dp[i+1][j] + (d[i] * d[i+1] * d[j+ 1]);

            for(int  k = i + 1; k <= j - 1; k++)

                dp[i][i + c] = min(((dp[i][k] + dp[k+1][j]) + (d[i]* d[k+1]*d[j+1])), dp[i][j]);

        }

    }

}



int main()

{

    citire();

    initializare_dp();

    solve();

    fout << dp[0][n - 1];

    return 0;

}