Pagini recente » Cod sursa (job #2573480) | Cod sursa (job #22332) | Cod sursa (job #726895) | Cod sursa (job #368247) | Cod sursa (job #2200655)
#include <stdio.h>
#include <stdlib.h>
const int INF = 1999999999;
FILE *fin, *fout;
long long int n, i, j, k, t, mini, val, v[1005], C[1005][1005];
void citire() {
fscanf(fin, "%d", &n);
for (i = 1 ; i <= n + 1 ; i++)
fscanf(fin, "%d", &v[i]);
}
void findMinimum() {
for (k = 1 ; k <= n - 1 ; k++) {
for (i = 1 ; i <= n - k ; i++) {
j = i + k;
mini = INF;
for (t = i ; t < j ; t++) {
val = C[ i ][ t ] + C[ t + 1 ][ j ] + v[ i ] * v[ t + 1 ] * v[ j + 1 ];
if (mini > val) {
mini = val;
C[ i ][ j ] = mini;
C[ j ][ i ] = t;
}
}
}
}
}
void printOrder(int i, int j) {
if (i == j)
return;
int split = C[ j ][ i ];
printOrder(i, split);
printOrder(split + 1, j);
printf("(%d : %d) ", i, j);
}
int main()
{
fin = fopen("podm.in", "r");
fout = fopen("podm.out", "w");
citire();
findMinimum();
//printOrder(1, n);
//printf("\n");
fprintf(fout, "%d", C[ 1 ][ n ]);
return 0;
}