Pagini recente » Cod sursa (job #1238957) | Cod sursa (job #1487010) | Cod sursa (job #2744263) | Cod sursa (job #368574) | Cod sursa (job #1094998)
#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();
}