fork download
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. vector<int> tri; // Запас треуголтных чисел :)
  7. long long total = 0; // Количество решений
  8.  
  9. vector<int> solution; // Вектор для решения
  10.  
  11. // Рекурсивный вызов, изначально - доступны все числа (k)
  12. void getThree(int n, int k = tri.size()-1)
  13. {
  14. if (n==0) // Ура, найден!
  15. {
  16. ++total;
  17. // Если захотим вывести - раскомментировать
  18. // for(auto i: solution) cout << i << " "; cout << endl;
  19. return;
  20. }
  21.  
  22. if (n < 0 || k < 0) return; // Тупик - решение не получилось
  23.  
  24. // Ветвь с использованием k-го числа
  25. solution.push_back(tri[k]);
  26. getThree(n-tri[k],k-1);
  27. solution.pop_back();
  28.  
  29. // Ветвь без него
  30. getThree(n,k-1);
  31. }
  32.  
  33.  
  34. int main(int argc, const char * argv[])
  35. {
  36. // Заполняем массив треугольными числами
  37. for(int i = 1; i <= 64; ++i) tri.push_back(i*(i-1)/2);
  38.  
  39. // Приступаем...
  40. getThree(2018);
  41. cout << total << endl;
  42. }
  43.  
  44.  
Time limit exceeded #stdin #stdout 5s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty