Pagini recente » Cod sursa (job #455268) | Cod sursa (job #42811) | Cod sursa (job #3278579) | Cod sursa (job #2547720) | Cod sursa (job #381116)
Cod sursa(job #381116)
//Parantezare matrici, arhiva educationala infoarena
#include <stdio.h>
// Defines
#define SIZE 512
#define INF 9999999
// Global data
long long N, D[SIZE], M[SIZE][SIZE];
// Prototypes
void ReadData();
void Compute();
void WriteData();
long Min(long A, long B);
/*void Debug()
{
for(int i = 0; i<=N; ++i)
{
for(int j = 0; j<=N; ++j)
{
printf("%ld ", M[i][j]);
}
printf("\n");
}
}
*/
// Impementation
int main()
{
freopen("podm.in","r",stdin);
freopen("podm.out","w", stdout);
ReadData();
Compute();
//Debug();
WriteData();
return 0;
}
void ReadData()
{
scanf("%ld", &N);
for(int i = 0; i <= N; ++i)
scanf("%lld", &D[i]);
}
void Compute()
{
for(int i = 0; i <= N; ++i)
M[i][i] = 0;
for(int i = 1; i <= N-1; ++i)
M[i][i + 1] = D[i - 1] * D[i] * D[i + 1];
for(int w = 2; w <= N - 1; ++w)
for(int i = 1; i < N - w; ++i)
{
int j = i + w;
M[i][j] = INF;
for(int k = i; k <= j - 1; ++k)
M[i][j] = Min(M[i][j], M[i][k] + M[k + 1][j] + D[i - 1] * D[k] * D[j]);
}
}
void WriteData()
{
printf("%lld\n", M[1][N]);
}
long Min(long A, long B)
{
if(A < B)
return A;
return B;
}