Итак, вот вопрос:
В партии есть n разных ароматных тортов объемом V1, V2, V3... Vn каждый. Необходимо разделить их на людей, присутствующих на вечеринке, чтобы
-
Все участники вечеринки получают равный объем торта (скажем, V, решение которого мы ищем)
-
Каждый участник должен получить только торт с единственным ароматом (вы не можете распределять части разных ароматизированных пирожных члену).
-
Некоторое количество пирога будет потрачено впустую после распределения, мы хотим минимизировать отходы; или, что то же самое, мы после максимальной политики распространения
Учитывая известное условие: если V - оптимальное решение, то по крайней мере один пирог X можно разделить на V без остатка объема, то есть Vx mod V == 0
Я пытаюсь найти решение с наилучшей временной сложностью (грубая сила сделает это, но мне нужно быстрее).
Любое предложение будет оценено.
Спасибо
PS: Это не задание, это вопрос Интервью. Вот pseducode для грубой силы:
int return_Max_volumn(List VolumnList)
{
maxVolumn = 0;
minimaxLeft = Integer.Max_value;
for (Volumn v: VolumnList)
for i = 1 to K people
targeVolumn = v/i;
NumberofpeoplecanGetcake = v1/targetVolumn +
v2/targetVolumn + ... + vn/targetVolumn
if (numberofPeopleCanGetcake >= k)
remainVolumn = (v1 mod targetVolumn) + (v2 mod targetVolumn)
+ (v3 mod targetVolumn + ... + (vn mod targetVolumn)
if (remainVolumn < minimaxLeft)
update maxVolumn to be targetVolumn;
update minimaxLeft to be remainVolumn
return maxVolumn
}