Читал, что такие задачи решаются так называемым "Динамическим Программированием", но к сожалению, хотя и понимаю суть этого метода, навыка решений оллимпиадных задач маловато.
Так же, сразу видно, что эту задачу можно решать рекурсивным перебором, но тоже не смог составить правильный алгоритм решения.
Хотелось бы получить совет о том, какую литературу или статьи почитать, для понимания таких задач.
А так же предложения о том, как решать задачу сабжа.
Мои попытки закончились провалом.
Лучшее к чему я пришел в теории, это подобие рекурсивного алгоритма:
habrastorage.org/files/82b/160/5cc/82b1605cc82b414...
(Каждая лесенка уменьшается с конца на 1 кубик, и рассматривается "отрубленная" часть)
Но такой метод привел меня в тупик уже на 13 кубиках:
habrastorage.org/files/cf9/610/866/cf96108666db4ad...
Мой код:
pastebin.com/XWE3QZgL
Где-то наткнулся на невероятно красивое решение на Java, переписал его на C++, но для меня это абсолютнейшая магия, возможно кто-то пояснит, что тут происходит, и на какую базу все это опирается:
pastebin.com/6ACsC9ta