错了#2#3,真找不出来了……
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int MAXN = 100 + 5;
inline int max(int x, int y) {
return x < y ? y : x;
}
inline int min(int x, int y) {
return x < y ? x : y;
}
int n, num[MAXN], f[MAXN][MAXN], g[MAXN][MAXN];
char opt[MAXN];
int main() {
std::ios::sync_with_stdio(false);
std::cin >> n;
for (int i=1; i<=n; ++i) {
std::cin >> opt[i] >> num[i];
opt[n+i] = opt[i]; num[n+i] = num[i];
}
memset(f, -1e9, sizeof(f));
memset(g, 1e9, sizeof(g));
for (int i=1; i<=2*n; ++i)
f[i][i] = g[i][i] = num[i];
for (int len=2; len<=n; ++len) {
for (int i=1,j=len; j<=2*n; ++i,++j) {
for (int k=i; k<j; ++k) {
if (opt[k+1] == 't') {
f[i][j] = max(f[i][j], f[i][k] + f[k+1][j]);
g[i][j] = min(g[i][j], g[i][k] + g[k+1][j]);
}
if (opt[k+1] == 'x') {
f[i][j] = max(f[i][j], max(f[i][k] * f[k+1][j], max(g[i][k] * f[k+1][j], max(f[i][k] * g[k+1][j], g[i][k] * g[k+1][j]))));
g[i][j] = min(g[i][j], min(g[i][k] * g[k+1][j], min(f[i][k] * g[k+1][j], min(g[i][k] * f[k+1][j], f[i][k] * f[k+1][j]))));
}
}
}
}
int ans = -1e9;
for (int i=1; i<=n; ++i)
ans = max(ans, f[i][i+n-1]);
std::cout << ans << '\n';
for (int i=1; i<=n; ++i)
if (f[i][i+n-1] == ans)
std::cout << i << ' ';
std::cout << std::endl;
return 0;
}