Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Choice
- {
- int a, b;
- int remove;
- };
- struct Ret
- {
- long long result;
- vector<Choice> choices;
- };
- Ret bruteForceRecursion(const vector<int>& numbers, int currentResult, const vector<Choice>& choices)
- {
- if (numbers.size() <= 1)
- {
- return Ret{currentResult, choices};
- }
- Ret max{0, vector<Choice>{}};
- for (int i = 0; i < numbers.size(); ++i)
- {
- for (int j = 0; j < numbers.size(); ++j)
- {
- if (j < i)
- {
- currentResult += numbers[i] ^ numbers[j];
- vector<int> numbers2_1(numbers), numbers2_2(numbers);
- vector<Choice> choices2_1(choices), choices2_2(choices);
- //prepare variables for recursion
- numbers2_1.erase(numbers2_1.begin() + i); //remove first
- numbers2_2.erase(numbers2_2.begin() + j); //remove second
- choices2_1.push_back(Choice{numbers[i], numbers[j], numbers[i]});
- choices2_2.push_back(Choice{numbers[i], numbers[j], numbers[j]});
- //recurse
- Ret r1 = bruteForceRecursion(numbers2_1, currentResult, choices2_1);
- Ret r2 = bruteForceRecursion(numbers2_2, currentResult, choices2_2);
- //choose higher result of current and two returned
- if (r1.result > max.result)
- {
- max = r1;
- }
- if (r2.result > max.result)
- {
- max = r2;
- }
- //restore environment for next loop iterations
- currentResult -= numbers[i] ^ numbers[j];
- }
- }
- }
- return max;
- }
Add Comment
Please, Sign In to add comment