Смотря в чем задача конкретно, задача рюкзака это общее название.
У тебя код осуществляет попытку найти максимальную ценность предметов при условии, что в рюкзак можно положить 4 кг. На твое тестовом сете он работает правильно, если я изменю тестовый сет то нет. Например если я сделаю
=[(4000,4), (2500,1),(2000,3), (8000, 2), (9000, 4), (7000,2)]
То я ожидаю ценность 15000, а он дает все равно 10500.
Я бы рекомендовал тебе статью
https://www.geeksforgeeks.org/0-1-knapsack-problem... там несколько имплементаций в том числе и рекурсивный, и оптимизированный динамический, и на нескольких языках.
Задача рюкзака это классика, она требует погружения в проблему, посидеть над ней как следует. Возьми код из ссылки и поработай несколькими способами.