Хорошо, у меня проблема. У меня есть набор "А" из бутылок разных размеров, полный воды. Тогда у меня есть другой набор "B" бутылок разных размеров, все пустые.
Я хочу передать воду от А до Б, зная, что общая емкость каждого набора одинакова. (т.е.: в наборе А содержится такое же количество воды, как установлено B).
Это, конечно, тривиально само по себе, просто возьмите первую бутылку в B, вылейте ее в первом в A, пока она не будет заполнена. Тогда, если бутылка из B еще остается в ней, продолжайте со второй бутылкой в A и т.д.
Однако я хочу свести к минимуму общее количество ливней (действие наливания из бутылки в другое, каждое действие считается 1, независимо от того, сколько воды оно включает)
Я хотел бы найти жадный алгоритм, чтобы сделать это, или, если не возможно, по крайней мере, эффективный. Однако эффективность является вторичной по отношению к правильности алгоритма (я не хочу субоптимальное решение).
Конечно, эта проблема - всего лишь метафора реальной проблемы в компьютерной программе для управления личными расходами.