#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; class Monster { public: void solve(void) { int N; cin>>N; vector D(N); REP(i,N) cin>>D[i]; sort(RANGE(D)); // 最大 HP は戦ったモンスターの組み合わせから一意に決まるので先にもとめておく vector maxHP(1< dp(1< 0) dp[b] = min(max(dp[b], dp[bit]+D[i]), maxHP[b]); else dp[b] = max({dp[b], dp[bit]+D[i], 0}); } } cout<solve(); delete obj; return 0; } #endif