Cod sursa(job #929271)

Utilizator 2dorTudor Ciurca 2dor Data 26 martie 2013 22:28:59
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;

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

const long long INF = 1LL << 60;
int n, i, j, diag;
int d[505];//dimensiunile matricelor
long long best[505][505];//minimul de inmultiri

struct cuplu{
    int lin, col;
}dim[505][505];

//void afisare() {
//    for (i = 1; i <= n; ++i) {
//        for (j = 1; j <= n; ++j)
//            cout << setw(4) << best[i][j] << ' ';
//        cout << '\n';
//    }
//    cout << "\n\n";
//}

int main() {
    fin >> n;
    for (i = 0; i <= n; ++i)
        fin >> d[i];
    for (i = 1; i < n; ++i)//initializez
        best[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
    for (diag = 2; diag < n; ++diag)
        for (i = 1; i <= n - diag; ++i) {
            j = i + diag;
            best[i][j] = INF;
            for (int k = i; k < j; ++k)
                best[i][j] = min(best[i][j], best[i][k] + best[k + 1][j] + d[i - 1] * d[k] * d[j]);
        }
    fout << best[1][n - 1];
    fin.close();
    fout.close();
    return 0;
}