#include #include #include #include #include #include #include #include #include #include #define ALL(variable) (variable).begin(), (variable).end() #define GT(variableName, defaultValue, limit) for(int variableName = defaultValue; variableName < (int)limit; variableName++) #define GTE(variableName, defaultValue, limit) for(int variableName = defaultValue; variableName <= (int)limit; variableName++) #define LT(variableName, defaultValue, limit) for(int variableName = defaultValue; variableName > (int)limit; variableName--) #define LTE(variableName, defaultValue, limit) for(int variableName = defaultValue; variableName >= (int)limit; variableName--) using namespace std ; int main(){ long long n, answer; cin >> n; answer = LLONG_MAX; vector A(n), B(n); GT(i, 0, n){ cin >> A[i] >> B[i]; } vector upA(0), loA(0); GT(i, 0, pow(2, n/2)){ long long memo = 0, _i = i; GT(j, 0, n/2) { if(_i%2 == 0){ memo += A[j]; } else{ memo -= B[j]; } _i = i>>1; } upA.push_back(memo); } GT(i, 0, pow(2, n-n/2)){ long long memo = 0, _i = i; GT(j, 0, n-n/2) { if(_i%2 == 0){ memo += A[j+n/2]; } else{ memo -= B[j+n/2]; } _i = i>>1; } loA.push_back(memo); } sort(ALL(upA)); sort(ALL(loA)); GT(i, 0, upA.size()){ long long _ = min(abs(upA[i] + loA[lower_bound(ALL(loA), -upA[i])-loA.begin()]), abs(upA[i] + loA[lower_bound(ALL(loA), -upA[i])-1-loA.begin()])); answer = min(answer, _); } cout << answer << endl; }