Мне не удалось сопоставить эту проблему с какой-то канонической, и я хотел бы, чтобы некоторые руководства построили/использовали алгоритм и решили его. Описание выглядит следующим образом:
У нас есть люди, которые хотят завтракать. Каждый может заказать любое количество кофе, сока и тостов. Мы накапливаем заказ на всю группу.
InitialOrder = { C1, J1, T1 } with C1, J1, T1 being integer non-negative numbers.
Каждый компонент имеет заданную цену, поэтому общая стоимость начального заказа равна
InitialPrice = C1 * Pc + J1 * Pj + T1 * Pt with Pc, Pj, Pt being rational positive numbers
В кафетерии также есть «меню завтраков», состоящее из комбинаций стандартных блюд.
full breakfast = coffee + juice + toast normal breakfast = coffee + toast bread breakfast = 2 toast
Выбор этих меню дешевле, чем выбор каждого компонента по отдельности, поэтому у нас есть
Pf < Pc + Pj + Pt Pn < Pc + Pt Pb < 2 * Pt with Pf, Pn, Pb being rational positive numbers
Люди хотят сгруппировать первоначальный заказ в меню, чтобы свести к минимуму общую потраченную сумму. потом
FinalOrder = { C2, J2, T2, F, N, B } with C2, J2, T2, F, N, B integer non-negative numbers
и у нас будет FinalPrice ‹= InitialPrice как
FinalPrice = C2 * Pc + J2 * Pj + T2 * Pt + F * Pf + N * Pn + B * Pb with Pc, Pj, Pt, Pf, Pn, Pb as rational positive numbers
Все цены (Pc, Pj, Pt, Pf, Pn и Pb) известны заранее.
Пожалуйста, знаете ли вы, какой подход я должен использовать для построения алгоритма минимизации FinalPrice для данного InitialOrder? Не стесняйтесь спрашивать любые дополнительные детали, которые вам нужны.
Заранее спасибо.