#include #include #include #include //#include #include #include #include #include #include //#include #include #include #include //#include #include #include //#include #include #include #include const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; typedef vector vi; typedef vector vll; typedef pair pii; typedef complex C; int dp[1011]; int ne[1011]; int n; int V[1011]; int dfs(int cur) { if (cur >= n) return 0; int& ret = dp[cur]; if (ret >= 0) return ret; ret = 0; ret = dfs(cur+1); for (int i = cur+2; i <= n+1; i++) { if (ret < dfs(i)+V[cur]) { ne[cur] = i; ret = dfs(i)+V[cur]; } } return ret; } int main() { cin.tie(0); ios::sync_with_stdio(false); cin >> n; for (int i = 0; i < n; i++) cin >> V[i]; memset(dp, -1, sizeof(dp)); for (int i = 0; i < n; i++) ne[i] = i+1; int ans = dfs(0); cout << ans << endl; vector select; // for (int i = 0; i < n; i++) { // cout << i << " " << ne[i] << endl; // } int cur = 0; while (cur < n) { if (ne[cur] == cur+1) cur = cur+1; else { select.push_back(cur+1); cur = ne[cur]; } } int m = select.size(); for (int i = 0; i < m; i++) { cout << select[i] ; if (i < m-1) cout << " "; } cout << endl; return 0; }