#include<iostream> #include<iomanip> using namespace std; int n, p[30], m[30][30], s[30][30], i , j, r, k, leftBracket[30], rightBracket[30]; void input(){ for(i = 0; i <= n; i++) cin >> p[i]; } void MatrixChain(){ memset(m, 0, sizeof(m)); memset(leftBracket, 0, sizeof(leftBracket)); memset(rightBracket, 0, sizeof(rightBracket)); for(r = 1; r < n; r++) for(i = 1; i <= n - r; i++){ j = i + r; m[i][j] = m[i + 1][j] + p[i - 1] * p[i] * p[j]; s[i][j] = i; for(k = i + 1; k < j; k++){ int t = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]; if(t < m[i][j]){ m[i][j] = t; s[i][j] = k; } } } cout << m[1][n] << endl; } void showTableB(){ cout << "Table B:" << endl; for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ if(i <= j)cout << setw(8) << m[i][j] << " " ; else cout << setw(8) << "-" << " " ; }cout << endl; } cout << endl; } void showTableC(){ cout << "Table C:" << endl; for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ if(i <= j) cout << setw(3) << s[i][j] << " " ; else cout << setw(3) << "-" << " " ; }cout << endl; } cout << endl; } void SetBrackets(int s[][30], int m, int n){ if(m < n){ leftBracket[m - 1]++; rightBracket[n]++; SetBrackets(s, m, s[m][n]); SetBrackets(s, s[m][n] + 1, n); } } void ShowChain(){ leftBracket[0]--; rightBracket[n]--; for(i = 0; i <= n; i++){ if(i != 0) cout << "A" << i; while(rightBracket[i] > 0){ rightBracket[i]--; cout << ")"; } while(leftBracket[i] > 0){ leftBracket[i]--; cout << "("; } } cout << endl; } int main(){ freopen("a.txt", "r", stdin); freopen("b.txt", "w", stdout); int kkk = 1; while(cin >> n){ cout << "Case " << kkk << endl; kkk++; input(); MatrixChain(); showTableB(); showTableC(); SetBrackets(s, 1, n); ShowChain(); cout << endl; } return 0; }