#include #include using namespace std; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x d, dp; int rec(int mask) { int &res = dp[mask]; if(mask == 0) { return res = 100; } if(res != -1) { return res; } int maxHP = 100; for(int i : range(n)) { // 過去にi番目と戦っていたら最大HPが増える。 if((mask>>i & 1) && d[i] < 0) { maxHP += 100; } } res = 0; // 今回i番目と遭遇する。 for(int i : range(n)) { if(!(mask>>i & 1)) { continue; } int nmask = mask & ~(1< 0) { res = max(res, min(maxHP, now)); } else { res = max(res, max(0, now)); } } return res; } int main(void) { scanf("%d", &n); d.resize(n); for(int i : range(n)) { scanf("%d", &d[i]); } dp.resize(1<