Cod sursa(job #1980971)

Utilizator Mihai_PredaPreda Mihai Dragos Mihai_Preda Data 14 mai 2017 15:08:00
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;

const int nMax = 505;
const long long INF = (1LL << 62);

int n;
long long d[nMax];
long long dp[nMax][nMax];

void citire()
{
    ifstream in("podm.in");
    in >> n;
    for(int i = 0; i <= n; ++i)
        in >> d[i];
    in.close();
}

void rezolvare()
{
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= n; ++j)
            dp[i][j] = INF;
    for(int i = 1; i <= n; ++i)
        dp[i][i] = 0;
    int st, dr;
    long long cost;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= n; ++j)
        {
            st = j;
            dr = j + i - 1;
            if(dr > n)
                break;
            for(int k = st; k < dr; ++k)
            {
                cost = dp[st][k] + dp[k+1][dr] + d[st-1] * d[k] * d[dr];
                dp[st][dr] = min(dp[st][dr], cost);
            }
        }
    }
    ofstream out("podm.out");
    out << dp[1][n];
    out.close();
}

int main()
{
    citire();
    rezolvare();
    return 0;
}