Pagini recente » Borderou de evaluare (job #1889079) | Borderou de evaluare (job #1134162) | Borderou de evaluare (job #700591) | Cod sursa (job #2960523) | Cod sursa (job #3274203)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
const int INF = 1e9;
int n, p[502], dp[502][502];
int main() {
// Citim numarul de matrici
fin >> n;
// Citim dimensiunile matricelor
for (int i = 1; i <= n + 1; ++i)
fin >> p[i];
// Inițializăm dp[i][j] cu infinit pentru i ≠ j
for (int i = 1; i <= n; ++i)
for (int j = i + 1; j <= n; ++j)
dp[i][j] = INF;
// Programare dinamică: calculăm dp[i][j]
for (int len = 2; len <= n; ++len) { // Lungimea subsecvenței
for (int i = 1; i <= n - len + 1; ++i) {
int j = i + len - 1;
for (int k = i; k < j; ++k) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + p[i] * p[k + 1] * p[j + 1]);
}
}
}
// Scriem rezultatul optim
fout << dp[1][n] << '\n';
}