Kód: Vybrať všetko
int chainMatrixMultiplication(int *r, int n) {
int m[n+1][n+1];
int i,j,k,L,q;
for(i = 1; i<=n; i++)m[i][i] = 0;
for(L=2;L<n;L++){
for(i=1;i<n-L+1;i++){
j=i+L-1;
m[i][j]=INT_MAX;
for (k=i;k<=j-1;k++){
q=m[i][k]+m[k+1][j]+r[i-1]*r[k]*r[j];
if(q<m[i][j]){
m[i][j]=q;
}
}
}
}
return m[1][n-1];
}
int main(int argc, char *argv[])
{
printf("\n\nMINIMALNY POCET OPERACII PRI NASOBENI MATIC:\n");
int rozmery[]={ 10, 20, 50, 1 ,100 };
for(i=1;i<=4;i++)printf(" M%d (%3d,%3d)\n",i,rozmery[i-1],rozmery[i]);
printf("Vysledok: %d\n\n",chainMatrixMultiplication(rozmery,4));
printf("\n");
return 0;
}