Pagini recente » Cod sursa (job #1708479) | Cod sursa (job #3199630) | Cod sursa (job #2036296) | Cod sursa (job #1344399) | Cod sursa (job #435839)
Cod sursa(job #435839)
#include <cstdio>
#define Inf 18446744073709551615LL
int N;
unsigned long long col[512], lin[512], opt[512][512];
void read() {
freopen("podm.in", "r", stdin);
// citesc numarul de matrice
scanf("%d", &N);
// citesc dimensiunile matricelor
for (int i = 0; i <= N; ++i) {
scanf("%llu", &col[i]);
if (i >= 1) {
lin[i] = col[i - 1];
}
}
}
void solve() {
for (int k = 2; k <= N; ++k) {
int Nk = N - k + 1;
for (int i = 1; i <= Nk; ++i) {
int j = i + k - 1;
// infinit
opt[i][j] = Inf;
// incerc matrice mai multe
for (int l = i; l < j; ++l) {
if (opt[i][l] + opt[l + 1][j] + lin[i] * col[l] * col[j] < opt[i][j]) {
opt[i][j] = opt[i][l] + opt[l + 1][j] + lin[i] * col[l] * col[j];
}
}
}
}
}
void write() {
freopen("podm.out", "w", stdout);
// scriu rezultatul inmultirii
printf("%llu\n", opt[1][N]);
}
int main() {
read();
solve();
write();
return 0;
}