Cod sursa(job #1094998)

Utilizator TED_996Budaca Eduard TED_996 Data 30 ianuarie 2014 10:38:24
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<fstream>

#define INF ((2 << 29) - 1)

using namespace std;

int nrMatr;
int lg[504];

//int matr[504][12008][12008];

long long nrMin[504][504];

void citire();
void generare();
void afisare();

int main() {
	citire();

	generare();

	afisare();
	return 0;
}

void citire() {
    int i;
	ifstream fin("podm.in");

	fin >> nrMatr;
	for (i = 0; i <= nrMatr; i++){
        fin >> lg[i];
	}

	/*for (i = 1; i <= nrMatr; i++){
        for (l = 0; l < lg[i]; l++){
            for (c = 0; c < lg[i + 1]; c++){
                fin >> matr[i][l][c];
            }
        }
	}*/



	fin.close();
}

void generare(){
    //doua matrici
    int i, j, k, x, minim;
    for (i = 1; i < nrMatr; i++){
        nrMin[i][i + 1] = lg[i - 1] * lg[i] * lg[i + 1];
    }

    for (x = 3; x <= nrMatr; x++){
        for (i = 1; i <= nrMatr - x + 1; i++){
            j = i + x - 1;
            nrMin[i][j] = INF;
            for (k = i; k < j; k++){
                if (nrMin[i][k] + nrMin[k + 1][j] + lg[i - 1] * lg[k] * lg[j] < nrMin[i][j]){
                    nrMin[i][j] = nrMin[i][k] + nrMin[k + 1][j] + lg[i - 1] * lg[k] * lg[j];
                    nrMin[j][i] = k;
                }
            }
        }
    }
}


void afisare() {
	ofstream fout("podm.out");

    fout << nrMin[1][nrMatr] << '\n';

	fout.close();
}