Приветствую!
Как можно (с приемлемой мерностью алгоритма) решить такую задачку:
- дана цистерна на N (целое число) литров
- набор из К ведерок, каждое - емкостью в определенное целое число литров
Рядом - озеро, из которого при необходимости можно подлить воду в цистерну теми же вёдрами.
Можно ли данным набором полностью вычерпать цистерну досуха?
А можно ли вычерпать так, чтобы как можно больше ведерок хотя бы раз побывало наполненным водой?
На кажущуюся шуточность вопрос имеет под собой серьезную подоплеку в АБАП-е - а именно подгонку суммы субтоталов с налогом из таблицы (цена за штуку, кол-во, субтотал, налог, субтотал с налогом) под гранд-тоталь при конвертации из одной валюты в другую.
Т.е. гранд-тоталь (итого) документа переводится в другую валюту и округляется, под него надо подогнать сумму субтоталов.
Цены на штуку тоже конвертируются из одной валюты в другую и округляются, в итоге ошибка округления "выстреливает" на субтотал.
То есть имеем по строкам:
1. Изменение на 1 копейку цены на товар А, который пришел в определенном кол-ве - меняет грандтоталь на 5 копеек.
2. Изменение на 1 копейку цены на товар Б, который пришел в определенном кол-ве - меняет грандтоталь на 16 копеек.
3. Изменение на 1 копейку цены на товар В, который пришел в определенном кол-ве - меняет грандтоталь на 7 копеек.
Сумма субтоталов в данный момент же отстает от грандтотала на 9 копеек.
Можно ли алгоритмом вычислить оптимальный набор целочисленных коэффициентов к, при котором к1*5 + к2*16 + к3*7 = 9?
Под оптимальным имеется в виду - к1, к2 и к3 не очень сильно отличаются друг от друга.
Вот
