// Optimal matrix multiplication order using dynamic programming #include int p[20]; int n; int c[20][20]; int trace[20][20]; void tree(int left,int right,int indent) { int i; if (left==right) { for (i=0;iwork) { c[j][j+i]=work; trace[j][j+i]=k; } } printf(" c[%d][%d]==%d,trace[%d][%d]==%d\n",j,j+i, c[j][j+i],j,j+i,trace[j][j+i]); } printf(" "); for (i=1;i<=n;i++) printf(" %3d ",i); printf("\n"); for (i=1;i<=n;i++) { printf("%2d ",i); for (j=1;j<=n;j++) if (i>j) printf(" ------- "); else printf(" %3d %3d ",c[i][j],trace[i][j]); printf("\n"); printf("\n"); } tree(1,n,0); }