Cod sursa(job #3275372)

Utilizator ioana_moga600Ioana Moga ioana_moga600 Data 10 februarie 2025 10:50:44
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

#define cin fin
#define cout fout

int n, dim[502], cost[502][502];

int main() {
    cin >> n;

    for (int i = 0; i <= n; i++) {
        cin >> dim[i]; // Citim dimensiunile matricilor
    }

    // Inițializăm costurile pentru subsecvențe de lungime 1 (cost zero, deoarece nu există înmulțiri)
    for (int i = 1; i <= n; i++) {
        cost[i][i] = 0;
    }

    // Aplicăm programarea dinamică
    for (int lungime = 2; lungime <= n; lungime++) {  // Lungimea subșirului de matrici
        for (int i = 1; i <= n - lungime + 1; i++) {  // Stânga intervalului
            int j = i + lungime - 1;  // Dreapta intervalului
            cost[i][j] = 1000000000;  // Folosim o valoare mare în loc de INT_MAX

            for (int k = i; k < j; k++) {  // Împărțim intervalul în două părți
                int temp = cost[i][k] + cost[k + 1][j] + dim[i - 1] * dim[k] * dim[j];
                if (temp < cost[i][j]) {
                    cost[i][j] = temp;
                }
            }
        }
    }

    cout << cost[1][n] << endl;  // Afișăm costul minim

    return 0;
}