#include #include #include #include using namespace std; const long long inf = LLONG_MAX / 2; int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) cin >> a[i]; sort(a.begin(), a.end()); vector dp0(40001, -inf); vector dp1(40001, -inf); dp0[0] = 0; for (int i = 0; i < n; i++) { vector new_dp0 = dp0; vector new_dp1 = dp1; for (int j = 0; j <= 40000; j++) { if (dp0[j] != -inf) { new_dp0[j] = max(new_dp0[j], dp0[j] + a[i]); } if (dp1[j] != -inf) { new_dp1[j] = max(new_dp1[j], dp1[j] + a[i]); new_dp1[abs(j - a[i])] = max(new_dp1[abs(j - a[i])], dp1[j]); } if (dp0[j] != -inf) { new_dp1[abs(j - a[i])] = max(new_dp1[abs(j - a[i])], dp0[j]); } if (j + a[i] <= 40000) { if (dp1[j] != -inf) { new_dp1[j + a[i]] = max(new_dp1[j + a[i]], dp1[j]); } if (dp0[j] != -inf) { new_dp1[j + a[i]] = max(new_dp1[j + a[i]], dp0[j]); } } } dp0 = new_dp0; dp1 = new_dp1; } cout << (dp1[0] <= 0 ? -1 : dp1[0]) << endl; return 0; }