Cod sursa(job #2554991)

Utilizator marius004scarlat marius marius004 Data 23 februarie 2020 16:19:45
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

std::ifstream f("podm.in");
std::ofstream g("podm.out");

const long long INF = (1LL << 61);
const int NMAX = 505;
long long n,v[NMAX],D[NMAX][NMAX];

int main(){

    f >> n;

    n++;
    for(int i = 1;i <= n;++i)
        f >> v[i];

    /// Se da un sir a cu n elemente
    /// Se da urmatoare operatie : (i,j,k) elimina v[k] din secventa (i,j).costul acestei operatii este v[i] * v[j] * v[k]
    /// sa se determine costul minim astfel incat sa ramana decat 1 si n

    for(int len = 3;len <= n;++len){
        for(int i = 1;i + len - 1 <= n;++i){

            int j = i + len - 1;

            D[i][j] = INF;
            for(int k = i + 1;k < j;++k){

                if(D[i][j] > D[i][k] + D[k][j] + v[i] * v[j] * v[k])
                    D[i][j] = D[i][k] + D[k][j] + v[i] * v[j] * v[k];
            }
        }
    }

    g << D[1][n];

    return 0;
}