$>Автор задачки прямо написал, что они сами используют
А мне кажется, что они очень прозрачно попросили не забивать шурупы микроскопом. И что не надо усложнять решение и искать в заведомо неверных направлениях.
Мне вот казалось, что я очень прозрачно намекнул на простой факт. Видимо — нет. Задача о рюкзаке — частный случай задачи о ветряках. Задача о рюкзаке — NP-полная. Типичный линейный solver (тот же симплекс-метод) — полиномиальный. Вывод — взять "линейный солвер" и прикрутить его напрямую к (NP-полной) задаче — пусть безнадежный. Нужно будет усложнять. Но многие разработчики не видят классов сложности, поэтому авторы пытались облегчить задачу и закрыть заведомо бесперспективные направления.
$>Уровень "что нельзя использовать" тут непонятен- например, numpy можно использовать?
Можно. Она ну никак не поможет побороть сложность (complexity class) исходной задачи. Более того, чтобы выбрать правильную библиотеку нужно хорошо понимать ее ограничения и особенности (например, псевдополиномиальные решения или осбоенности экспоненциального перебора). Обычно люди, имеющие такое знание, неплохо знают и основы (базовые блоки). Написать реализацию частного случая (простого!) для них будет легко.