В статье обсуждается рекурсивный подход к перечислению некоторых классов комбинаторных задач. Классические комбинаторные объекты-частые гости олимпиадных соревнований различного уровня. Комбинаторные проблемы, в которых они возникают, опираются на зависимость от рекуррентных соотношений и поэтому, чаще всего, решаются с помощью метода динамического программирования. При таком подходе сложные задачи решаются путём разбиения их на более простые и мелкие проблемы. Большинство примеров в этой статье встречались на соревновании по спортивному программированию-Открытом кубке им. Е.В. Панкратьева (Гран-При Татарстан). Это соревнование ежегодно проводится в г. Казани и служит одним из этапов подготовки студенческих и школьных команд для участия в финале ACM ICPC и Всероссийской олимпиады школьников по информатике. Полные тексты всех этих задач
доступны в Интернете: www.icl.ru/turnir.
This paper describes a recursive approach to the enumeration of some classes of combinatorial tasks. Most tasks are used in the specific scope of teaching and learning informatics through olympiads and other competitions. Combinatorial problems can often lead to interesting and beautiful dynamic programming tasks, because they both depend on recurrence relations: formulae that solve a larger
problem in terms of one or more smaller problems. Combinatorics of course is not the only branch of mathematics that can yield interesting tasks for programming contests. We focus on it here because many combinatorial problems have entertaining legends and they are easily accessible to students.
Many of the examples in this paper are taken from the Open Cup named after E.V. Pankratiev (Grand-Prix of Tatarstan). Full texts for all of these problems are available on the Internet: www.icl.ru/turnir.