Mai intai trebuie sa te autentifici.
Cod sursa(job #1002944)
Utilizator | Data | 29 septembrie 2013 12:52:48 | |
---|---|---|---|
Problema | Parantezare optima de matrici | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.79 kb |
#include <fstream>
#include <string.h>
#include <iostream>
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
int main() {
int n;
f >> n;
long long d[n + 2];
long long m[n + 2][n + 2];
memset(m, 0, sizeof(long long) * (n + 2) * (n + 2));
for (int i = 0; i <= n; i++) {
f >> d[i];
}
for (int i = 1; i < n; i++) {
m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
}
for (int j = 3; j <= n; j++) {
for (int i = 0; i <= n - j; i++) {
for (int k = i + 1; k <= i + j; k++) {
int c = d[i] * d[k] *d[j];
if (m[i + 1][j + i] == 0)
m[i + 1][j + i] = m[i + 1][k] + m[k+1][j + i] + c;
else
m[i + 1][j + i] = min(m[i + 1][k] + m[k+1][j + i] + c,
m[i + 1][j + i]);
}
}
}
g << m[1][n] << endl;
return 0;
}