// Optimal matrix multiplication order using dynamic programming #include main() { int p[20]; int n; int c[20][20]; int trace[20][20]; int i,j,k; int work; scanf("%d",&n); for (i=0;i<=n;i++) scanf("%d",&p[i]); for (i=1;i<=n;i++) c[i][i]=trace[i][i]=0; for (i=1;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"); } }