#include using namespace std; long largestValue(vector A) { // dict[sum Xi] = min sum Xi^2 unordered_map dict; long rtn = 0; dict[0] = 0; for (int x : A) { unordered_map curr; for (auto it = dict.begin(); it != dict.end(); ++it) { long key = it->first + x; long val = it->second + x * x; if (curr.find(key) == curr.end()) curr[key] = val; else curr[key] = min(curr[key], val); } for (auto it = curr.begin(); it != curr.end(); ++it) { if (dict.find(it->first) == dict.end()) dict[it->first] = it->second; else dict[it->first] = min(dict[it->first], it->second); long curr_val = (it->first * it->first - dict[it->first]) / 2; rtn = max(rtn, curr_val); } } return rtn; } int main() { int n; cin >> n; vector A(n); for(int A_i = 0; A_i < n; A_i++){ cin >> A[A_i]; } long result = largestValue(A); cout << result << endl; return 0; }