Pagini recente » Rating Gabriel Alexandru (aleex) | Monitorul de evaluare | Monitorul de evaluare | Rating ana maria (ana_2605) | Cod sursa (job #1344614)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
unsigned long long d[501], mat[501][501];
FILE *fo;
void solutie(int st, int dr){
if(st==dr)
fprintf(fo, "%d", st);
else{
int k=mat[dr][st];
fprintf(fo, "(");
solutie(st,k);
fprintf(fo, "*");
solutie(k+1,dr);
fprintf(fo, ")");
}
}
int main()
{
int i, n, k, diag;
unsigned long long calcul;
FILE *fi=fopen("podm.in", "r");
fo=fopen("podm.out", "w");
fscanf(fi, "%d", &n);
for(i=0;i<=n;i++)
fscanf(fi, "%llu", &d[i]);
for(i=1;i<n;i++){
mat[i][i+1]=d[i-1]*d[i]*d[i+1];
mat[i+1][i]=i;
}
for(diag=2;diag<n;diag++)
for(i=1;i<=n-diag;i++){
mat[i][i+diag]=0-1;
for(k=i;k<i+diag;k++){
calcul=mat[i][k]+mat[k+1][i+diag]+d[i-1]*d[k]*d[i+diag];
if(mat[i][i+diag]>calcul){
mat[i][i+diag]=calcul;
mat[i+diag][i]=k;
}
}
}
fprintf(fo, "%llu\n", mat[1][n]);
//solutie(1,n);
return 0;
}