Cod sursa(job #2346749)

Utilizator crion1999Anitei cristi crion1999 Data 18 februarie 2019 07:35:44
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#define NMAX 505
using namespace std;
ifstream fi("podm.in");
ofstream fo("podm.out");
pair<int, int> bounds[NMAX];
int N;
int Q[NMAX][NMAX];
int main()
{
    int curr, previous;
    fi >> N;

    fi >> previous;
    for(int i = 1; i <= N; ++i)
    {
        fi >> curr;
        bounds[i] = {previous, curr};
        previous = curr;
    }
    for(int i = 1; i <= N; ++i)
        Q[i][i] = 0;
    for(int i = 1; i <= N-1; ++i)
        Q[i][i+1] = bounds[i].first * bounds[i+1].first * bounds[i+1].second;


    for(int w = 2; w < N; ++w)
    {
        for(int i = 1; i <= N - w; ++i)
        {
            int j = i + w;
            Q[i][j] = 0x3f3f3f3f;
            for(int k = i; k <= j-1; ++k)
                Q[i][j] = min(Q[i][j], Q[i][k] + Q[k+1][j] + (bounds[i].first * bounds[k].second * bounds[j].second));

        }
    }

    fo << Q[1][N];
}