Динамическое программирование
Для решения таких задач используется метод динамического программирования.Довольно часто на олимпиадах встречаются задачи, провоцирующие к применению алгоритмы перебора.При этом осуществляется переход к еще более простым и так далее, пока не доходят до тривиальной.Из предыдущего рассуждения видно, что решение можно оформить рекурсивно.В общем виде она достаточна сложна, поэтому здесь не рассматривается.Формат входных данных.Одно число 0.Но простой подсчет числа вариантов убеждает в неэффективности такого подхода.Но простое применение этого приема очень легко может привести к переполнению стека.