#include <bits/stdc++.h>
using namespace std;
int solve(vector<int>& arr, int i, int j, int prev) {
// if (j - i <= 1) return 0; // Base case: Not enough elements
if(i>=j)
return 0;
int w1 = 0, w2 = 0, w3 = 0;
// Remove last two elements
if ( prev == arr[j - 1] + arr[j])
w1 = 1 + solve(arr, i, j - 2, prev);
// Remove first two elements
if ( prev == arr[i] + arr[i + 1])
w2 = 1 + solve(arr, i + 2, j, prev);
// Remove first and last element
if ( prev == arr[i] + arr[j])
w3 = 1 + solve(arr, i + 1, j - 1, prev);
return max({w1, w2, w3});
}
int findMaxMoves(vector<int>& a1) {
int n = a1.size();
int maxMoves = 0;
// Try all valid sums from initial pairs
set<int> possibleSums = {
a1[n - 2] + a1[n - 1], // Last two elements
a1[0] + a1[1], // First two elements
a1[0] + a1[n - 1] // First and last element
};
for (int sum : possibleSums) {
maxMoves = max(maxMoves, solve(a1, 0, n - 1, sum));
}
return maxMoves;
}
int main() {
vector<vector<int>> testCases = {
{3,1,5,3,3,4,2}, // Expected: 3
{4,1,4,3,3,2,5,2}, // Expected: 4
{1,9,1,1,1,1,1,1,8,1}, // Expected: 1
{1,9,8,9,5,1,2}, // Expected: 3
{1,1,2,3,1,2,2,1,1,2} // Expected: 4
};
for (auto& test : testCases) {
cout << findMaxMoves(test) << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgc29sdmUodmVjdG9yPGludD4mIGFyciwgaW50IGksIGludCBqLCBpbnQgcHJldikgewogICAgLy8gaWYgKGogLSBpIDw9IDEpIHJldHVybiAwOyAgLy8gQmFzZSBjYXNlOiBOb3QgZW5vdWdoIGVsZW1lbnRzCiAgICBpZihpPj1qKQogICAgICAgIHJldHVybiAwOwogICAgaW50IHcxID0gMCwgdzIgPSAwLCB3MyA9IDA7CgogICAgLy8gUmVtb3ZlIGxhc3QgdHdvIGVsZW1lbnRzCiAgICBpZiAoIHByZXYgPT0gYXJyW2ogLSAxXSArIGFycltqXSkKICAgICAgICB3MSA9IDEgKyBzb2x2ZShhcnIsIGksIGogLSAyLCBwcmV2KTsKCiAgICAvLyBSZW1vdmUgZmlyc3QgdHdvIGVsZW1lbnRzCiAgICBpZiAoIHByZXYgPT0gYXJyW2ldICsgYXJyW2kgKyAxXSkKICAgICAgICB3MiA9IDEgKyBzb2x2ZShhcnIsIGkgKyAyLCBqLCBwcmV2KTsKCiAgICAvLyBSZW1vdmUgZmlyc3QgYW5kIGxhc3QgZWxlbWVudAogICAgaWYgKCBwcmV2ID09IGFycltpXSArIGFycltqXSkKICAgICAgICB3MyA9IDEgKyBzb2x2ZShhcnIsIGkgKyAxLCBqIC0gMSwgcHJldik7CgogICAgcmV0dXJuIG1heCh7dzEsIHcyLCB3M30pOwp9CgppbnQgZmluZE1heE1vdmVzKHZlY3RvcjxpbnQ+JiBhMSkgewogICAgaW50IG4gPSBhMS5zaXplKCk7CiAgICBpbnQgbWF4TW92ZXMgPSAwOwoKICAgIC8vIFRyeSBhbGwgdmFsaWQgc3VtcyBmcm9tIGluaXRpYWwgcGFpcnMKICAgIHNldDxpbnQ+IHBvc3NpYmxlU3VtcyA9IHsKICAgICAgICBhMVtuIC0gMl0gKyBhMVtuIC0gMV0sIC8vIExhc3QgdHdvIGVsZW1lbnRzCiAgICAgICAgYTFbMF0gKyBhMVsxXSwgICAgICAgICAvLyBGaXJzdCB0d28gZWxlbWVudHMKICAgICAgICBhMVswXSArIGExW24gLSAxXSAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IGVsZW1lbnQKICAgIH07CgogICAgZm9yIChpbnQgc3VtIDogcG9zc2libGVTdW1zKSB7CiAgICAgICAgbWF4TW92ZXMgPSBtYXgobWF4TW92ZXMsIHNvbHZlKGExLCAwLCBuIC0gMSwgc3VtKSk7CiAgICB9CgogICAgcmV0dXJuIG1heE1vdmVzOwp9CgppbnQgbWFpbigpIHsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gdGVzdENhc2VzID0gewogICAgICAgIHszLDEsNSwzLDMsNCwyfSwgICAvLyBFeHBlY3RlZDogMwogICAgICAgIHs0LDEsNCwzLDMsMiw1LDJ9LCAvLyBFeHBlY3RlZDogNAogICAgICAgIHsxLDksMSwxLDEsMSwxLDEsOCwxfSwgLy8gRXhwZWN0ZWQ6IDEKICAgICAgICB7MSw5LDgsOSw1LDEsMn0sICAgLy8gRXhwZWN0ZWQ6IDMKICAgICAgICB7MSwxLDIsMywxLDIsMiwxLDEsMn0gLy8gRXhwZWN0ZWQ6IDQKICAgIH07CgogICAgZm9yIChhdXRvJiB0ZXN0IDogdGVzdENhc2VzKSB7CiAgICAgICAgY291dCA8PCBmaW5kTWF4TW92ZXModGVzdCkgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9