Pagini recente » Cod sursa (job #3288692) | Cod sursa (job #3170206) | Cod sursa (job #2198094) | Cod sursa (job #3267595) | Cod sursa (job #3275372)
#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;
}