Cod sursa(job #2262398)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 17 octombrie 2018 11:37:10
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

#define MaxN 505
#define ll   long long

std::ifstream InFile("podm.in");
std::ofstream OutFile("podm.out");

int N;
ll  Dim[MaxN],                  // Asa cum sunt date in fisierul initial
    DP[MaxN][MaxN];             // Pentru matricea M[i] am (Dim[i-1], Dim[i])

void Dyn() {
    for (int i=1; i<N; ++i)
        DP[i][i+1] = Dim[i-1]*Dim[i]*Dim[i+1];

    for (int len=2, i, j; len<=N; ++len) {
        for (i=1; i+len-1<=N; ++i) {
            DP[i][i+len-1] = DP[i][i] + DP[i+1][i+len-1] + Dim[i-1]*Dim[i]*Dim[i+len-1];

            for (j=i+1; j<=i+len-1; ++j)
                DP[i][i+len-1] = std::min(DP[i][j] + DP[j+1][i+len-1] + Dim[i-1]*Dim[j]*Dim[i+len-1], DP[i][i+len-1]);
        }
    }
}

void Citire() {
    InFile >> N;
    for (int i=0; i<=N; ++i)
        InFile >> Dim[i];
}

void Rezolvare() {
    Dyn();
    OutFile << DP[1][N] << '\n';
}

int main()
{
    Citire();
    Rezolvare();

    return 0;
}