No una respuesta, pero algunos datos numéricos, generado mediante el siguiente código rápido:
#include <vector>
#include <iostream>
#include <cstdlib>
using namespace std;
void getCandidates(int sum, const vector<bool> &nums, vector<int> &choices)
{
choices.clear();
for(int i=0; i<(sum-1)/2; i++)
{
if(nums[i] && nums[sum-i-2] && i != sum-i-2)
{
choices.push_back(i);
}
}
}
bool recurse(const vector<bool> &nums)
{
int max=-1;
for(int i=0; i<nums.size(); i++)
{
if(nums[i])
max = i;
}
if(max == -1)
{
return true;
}
vector<int> cands;
getCandidates(max+1, nums, cands);
for(int i=0; i<cands.size(); i++)
{
vector<bool> copy = nums;
copy[max] = false;
copy[cands[i]] = false;
copy[max-cands[i]-1] = false;
if(recurse(copy))
return true;
}
return false;
}
void testSize(int size)
{
vector<bool> nums;
for(int i=0; i<size; i++)
nums.push_back(true);
cout << size << ": ";
if(recurse(nums))
cout << "yes";
else
cout << "no";
cout << endl;
}
int main()
{
for(int i=0; i<33; i++)
testSize(3*i);
return 0;
}
Resultados hasta el momento en el que se pega a continuación. El peor caso de tiempo de ejecución es exponencial, por lo que nunca puede llegar a 99, pero voy a mantener esto actualizado, ya que el programa sigue funcionando.
0: yes
3: yes
6: no
9: no
12: yes
15: yes
18: no
21: no
24: yes
27: yes
30: no
33: no
36: yes
39: yes
42: no
45: no
48: yes
51: yes
54: no
57: no
60: yes
63: yes
Hasta ahora, la respuesta parece ser "sí" cuando $n$ satisface la condición necesaria para que $\frac{n(n+1)}{2}$ es incluso.
EDIT: Aquí está la solución para 24 solicitado por Leen de arriba.
(14, 4, 10) (15, 3, 12) (17, 8, 9) (18, 7, 11) (19, 6, 13) (21, 5, 16) (22, 2, 20) (24, 1, 23)