#include <bits/stdc++.h> using namespace std; void printPreOrder(int left, int right, vector<vector<int>>& bestRoot) { if (left > right) return; cout << bestRoot[left][right] + 1 << " "; printPreOrder(left, bestRoot[left][right] - 1, bestRoot); printPreOrder(bestRoot[left][right] + 1, right, bestRoot); } int main() { int n; cin >> n; vector<int> score(n); vector<vector<int>> bestScore(n, vector<int>(n, 0)); vector<vector<int>> bestRoot(n, vector<int>(n, 0)); for (int i = 0; i < n; i++) { cin >> score[i]; bestScore[i][i] = score[i]; bestRoot[i][i] = i; } for (int len = 2; len <= n; len++) { for (int i = 0; i + len - 1 < n; i++) { int j = i + len - 1; for (int r = i; r <= j; r++) { int leftScore = (r - 1 < i) ? 1 : bestScore[i][r - 1]; int rightScore = (r + 1 > j) ? 1 : bestScore[r + 1][j]; int curScore = leftScore * rightScore + score[r]; if (curScore > bestScore[i][j]) { bestScore[i][j] = curScore; bestRoot[i][j] = r; } } } } cout << bestScore[0][n - 1] << endl; printPreOrder(0, n - 1, bestRoot); cout << endl; return 0; } // 64 位输出请用 printf("%lld")