#include #include #include #include #include #include using namespace std; int main() { int n; cin >> n; vector d(n); int bads = 0; for (int i = 0; i < n; i++) { cin >> d[i]; if (d[i] < 0) { bads |= (1 << i); } } // dp[今までにあったモンスター (bits)] = とりうる現HPの最大値 vector dp(1 << n, 0); dp[0] = 100; int limit = dp.size(); int hp; for (int i = 0; i < limit; i++) { for (int j = 0; j < n; j++) { if ((i >> j) & 1) { hp = dp[i & ~(1 << j)]; if (hp <= 0) { continue; } if (d[j] > 0) { hp = min(hp + d[j], 100 + __builtin_popcount(i & bads) * 100); } else { hp += d[j]; } dp[i] = max(dp[i], hp); } } } cout << dp[(1 << n) - 1] << endl; return 0; }