Pagini recente » Cod sursa (job #1374023) | Cod sursa (job #104709) | Cod sursa (job #2462650) | Cod sursa (job #1390586) | Cod sursa (job #395999)
Cod sursa(job #395999)
#include <stdio.h>
#define N 100
int n, dim[N + 2];
int m[N + 1][N + 1];
void citeste()
{
FILE* fi = fopen("podm.in", "r");
fscanf(fi, "%d", &n);
int i;
for(i = 1; i <= n + 1; ++i) fscanf(fi, "%d", &dim[i]);
fclose(fi);
}
void scrie()
{
FILE* fo = fopen("podm.out", "w");
fprintf(fo, "%d\n", m[1][n]);
fclose(fo);
}
inline void init()
{
int i, j;
for(i = 1; i <= n; ++i) for(j = 1; j <= n; ++j) m[i][j] = -1;
}
int podm(int i, int j)
{
if(m[i][j] != -1) return m[i][j]; //valoarea a fost calculata
//in cazul in care valoarea nu a fost calculata
if(i == j) return m[i][j] = 0; //o matrice nu se va inmulti cu ea insasi
// i != j
int valmin = -1, k, candidat;
for(k = i; k <= j - 1; ++k)
{
//fprintf(stderr, "pana la urma *** ");
candidat = podm(i, k) + podm(k + 1, j) + dim[i] * dim[k + 1] * dim[j + 1];
if(candidat < valmin || valmin == -1) valmin = candidat;
}
m[i][j] = (valmin == -1 ? 0 : valmin);
#ifdef DEBUGME
fprintf(stderr, "podm(%d, %d): %d\n", i, j, m[i][j]);
#endif
return valmin;
}
int main()
{
citeste();
init();
podm(1, n);
scrie();
return 0;
}